ACMEプロトコルのバージョンをアップデートした

Let’sEncrypt(LE)で使用されている ACMEプロトコルのバージョンをアップデートします。

経緯

下のようなメールが来ていました。

Update your client software to continue using Let’s Encrypt

Beginning June 1, 2020, we will stop allowing new domains to validate using the ACMEv1 protocol. You should upgrade to an ACMEv2 compatible client before then, or certificate issuance will fail. For most people, simply upgrading to the latest version of your existing client will suffice. You can view the client list at: https://letsencrypt.org/docs/client-options/

2020年6月1日以降にACMEv1プロトコルを使用した更新動作が出来なくなりますよ、ということです。Webを少し見ると同様な方も多数いらっしゃっており、その方達と同じようにさっさと対処すべき話なのですが、June 1 2020という表記に完全に気を許してしまい気づいたら5月31日でした。今年2月からメールが来ていたのにね…。この放置癖には自分のことながら呆れかえります。

どうやらJune 1 2020ACMEv1の新規受付が不可となるだけのようにも見受けられその気になればまだ放置継続出来る可能性もあったわけですが、いざ更新動作が止まったら嫌だなと何を今更と思い直したので対応いたしました、という話です。

環境

$ cat /etc/os-release
NAME="Ubuntu"
VERSION="18.04.4 LTS (Bionic Beaver)"
(略)
$ certbot --version
certbot 0.27.0

方針確認

メールを斜め読みした当初は、LEの更新クライアントであるcertbotをアップデートすればよいのか?と考えてアップデートを進めていました。ですが、アップデートしたあとに手動で証明書を更新をしてみてもACMEv2で接続する気配が見えませんでした。よくよく確認してみると、どうやらそれは正確ではなかったようでした。

  1. certbotのバージョンが0.22.0以上であることを確認する。
  2. 1がOKな場合LEのconfファイルを編集する。1がNGの場合はバージョンを0.22.0以上にアップデートしてからconfファイルを編集する。

私はcertbotのアップデートを行ったあと2を作業したのですが、下のリンク先が示しているとおりcertbotがバージョン0.22.0以上であればACMEv2に対応しているため実はバージョンアップは必要無くconfファイルの編集のみで良かったのでは?と考えたところから来ています。

(参考) ACME v2 とワイルドカード証明書の技術情報

Confファイルの設定変更

LEのconfファイルの設定変更を行います。

  (略)
  # Options and defaults used in the renewal process
  [renewalparams]
  authenticator = webroot
  account = xxxxxxxxxxxxxxxxxxxxxxxxx
- server = https://acme-v01.api.letsencrypt.org/directory
+ server = https://acme-v02.api.letsencrypt.org/directory 
  [[webroot_map]]
  mkr-note.net = /hoge/fuga/

serverのURLの一部を01から02へ変更します。これだけです。

確認

実際に更新作業を行います。下では直接更新を行っていますが、dry-runでも確認自体は可能と思います。

$ sudo certbot renew --force-renewal

更新後にログを確認します。

2020-05-30 16:21:04,372:DEBUG:acme.client:Sending GET request to https://acme-v02.api.letsencrypt.org/directory.
2020-05-30 16:21:04,384:DEBUG:urllib3.connectionpool:Starting new HTTPS connection (1): acme-v02.api.letsencrypt.org
2020-05-30 16:21:05,718:DEBUG:urllib3.connectionpool:https://acme-v02.api.letsencrypt.org:443 "GET /directory HTTP/1.1"
200 658

エンドポイントがv02になっていますね。よかった。

出来ればブラウザでも変更されていることを確認したいのですが、あくまでプロトコル上の話であり証明書の内容には関連しないので、ブラウザから閲覧できる証明書には情報は載らないで理解が合っているのかしら。地味に気になる点ではある。また、02に変更しなくてもcertbotのアップデートだけでエンドポイントが変更となった報告もあったりするので少しもやもやする。[renewalparams]の書き方次第なのかな、という気はしていますがあまり調べていません。

(おまけ) certbot のアップデート

というわけで無事2020年6月1日を前に対処が完了したのですが、certbotのアップデートについても実施したので方法をメモしておきます。こちらのPPAを使用します。

$ sudo add-apt-repository ppa:certbot/certbot
Get:21 http://ppa.launchpad.net/certbot/certbot/ubuntu bionic/main amd64 Packages [8,032 B]
Get:24 http://ppa.launchpad.net/certbot/certbot/ubuntu bionic/main Translation-en [4,176 B]
(略)

このあとは普通にupdateしたあとcertbotをインストールします。

$ sudo apt update
$ sudo apt install certbot

最後にバージョンを確認します。

$ certbot --version
certbot 0.31.0

書いておいて何なのですが、Ubuntuの最新LTSである20.04ですと0.40.0がインストールされるので、そちらにアップグレードすることでも目的を達成できます。

© てっくらのーと/mkr-note 2024