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

Posted on 2020-05-31 in zakki

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 ファイルの設定変更を行います。

  • /etc/letsencrypt/renewal/(DomainName).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

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

  • /var/log/letsencrypt/letsencrypt.log
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がインストールされるので、そちらにアップグレードすることでも目的を達成できます。

Let's Encrypt Ubuntu