事の発端(蛇足)

少し前の話にはなりますが、AWS の Lightsail で運用していたワードプレスサイトがある日突然 SSL 証明書のエラーで開けなくなってしまいました。

証明書は自動更新される設定になっていたはずなのになぜ?と疑問に思うと同時に、そういえば Let’s Encrypt から数日前に何かメール届いていたなと開いてみると………

[Urgent] Let’s Encrypt revocations affecting your TLS certificates

Please immediately renew your TLS certificate(s) that were issued from Let’s Encrypt using the TLS-ALPN-01 validation method and the following ACME registration (account) ID(s):

321654987

We’ve determined that an error made it possible for TLS-ALPN-01 challenges, completed before today, to not comply with certificate issuance requirements. We have remediated this problem and will revoke all unexpired certificates that used this validation method at 16:00 UTC on 28 January 2022. Please renew your certificates now to ensure an uninterrupted experience for your site visitors.

We apologize for any inconvenience this may cause. If you need support in the renewal process, please comment on our forum post. Our staff and community members are available to help:

https://community.letsencrypt.org/t/170449

Thank you,

The Let’s Encrypt Team

証明書(のバリデーション方法)に問題があったのでこれらの証明書を無効にします。だからそれまでに証明書を更新しておいてね、みたいな内容でした。

ちゃんと読んでいなかった(開いてすらいなかった)私が悪いですが、それにしても寝耳に水でした。

それで、メール内に記載のリンク先を見ると、

UPDATE 29 January 2022:

We completed the revocation of approximately 2.7 million certificates validated with the TLS-ALPN-01 method. If a subscriber did not renew and replace their certificate before revocation, clients may see warnings and errors. Affected subscribers should continue to renew and their replace certs if they have not done so yet.

との記載があったので、私の使用していた証明書もこの 270 万の中に含まれていたということですね。


ということで証明書を更新しなければいけないわけですが、(今回のようなことがない限り)基本的には自動更新で済んでしまうもので、手動での更新手順を意外と知らないものだなと思い、メモしておこうと思い至ったわけです。

なお以降に記載の手順は、単純に証明書を更新する以外の手順も含んでいますので、必要なければ適宜読み飛ばしてください。

証明書の Account ID を調べる

私の場合、複数台管理していた Lightsail のうち、一部だけが今回の件の対象になっていたため、まずは対応が必要なインスタンスがどれなのか特定する必要がありました。

メールに以下のように書いてあり、

Please immediately renew your TLS certificate(s) that were issued from Let’s Encrypt using the TLS-ALPN-01 validation method and the following ACME registration (account) ID(s):

321654987

つまり上記例でいえば 321654987 という Account ID の証明書を使用しているインスタンスを特定します。

これは以下が参考になりました。

あなたのアカウント ID は、https://acme-v02.api.letsencrypt.org/acme/acct/12345678 という形式の URL で表されます。

Certbot を使用している場合、/etc/letsencrypt/accounts/acme-v02.api.letsencrypt.org/directory/*/regr.json ファイル内の “uri” フィールドを見ると確認できます。

また私の場合は bncert-tool を用いて証明書を設定していました。

そのため Account ID の記載したファイルは以下にありました。

/opt/bitnami/letsencrypt/accounts/acme-v02.api.letsencrypt.org/example@email.com/account.json

このファイルを開いてみると以下のようになっていました。先の引用文の通り uri のところでアカウント ID がわかります。

{
  "email": "example@email.com",
  "registration": {
    "body": {
      "status": "valid",
      "contact": ["mailto:example@email.com"]
    },
    "uri": "https://acme-v02.api.letsencrypt.org/acme/acct/321654987"
  }
}

SSL 証明書を確認・更新する

AWS が以下のガイドページを用意してくれています。

まずは現在の SSL 証明書を確認してみることにします。

sudo /opt/bitnami/letsencrypt/lego --path /opt/bitnami/letsencrypt list

を実行します。すると以下が出力されます。設定されているドメイン、有効期限などが確認できます。

Found the following certs:
  Certificate Name: example.com
    Domains: example.com, www.example.com
    Expiry Date: 2022-03-31 00:00:00 +0000 UTC
    Certificate Path: /opt/bitnami/letsencrypt/certificates/example.com.crt

では更新します。

bncert-tool または Lego ツールを使用してインストールした Let’s Encrypt 証明書を更新する

sudo /opt/bitnami/ctlscript.sh stop
sudo /opt/bitnami/letsencrypt/lego --tls --email="example@email.com" --domains="example.com" --path="/opt/bitnami/letsencrypt" renew --days 90
sudo /opt/bitnami/ctlscript.sh start

あるいは sudo /opt/bitnami/bncert-tool でも

または sudo /opt/bitnami/bncert-tool を実行する方法でも更新できると思います。

Lightsail を最初に SSL 化したときに叩くコマンドと同じです。

sudo /opt/bitnami/bncert-tool

最初にドメインを聞かれるので、現在設定されているものと同一のものを入力します。

すると、初回の SSL 設定時とはことなり、以下のメッセージが表示されるはずです。

Warning: A certificate for the list of domains you entered already exists.
It will be used instead of generating a new one.
Press [Enter] to continue:

そのドメインに対する証明書はすでに設定されているから、それを更新するよ。(よかったら Enter してね。)と言っていますので Enter しましょう。

その後は初回と同じ内容の質問が続くだけなので、こちらも初回と同じ回答をすればよいだけです。すると Success のメッセージが出るはず。

SSL 証明書のメールアドレスを変更する

ついでに証明書に紐づいているメールアドレスを変更したかったので、

sudo /opt/bitnami/letsencrypt/lego --tls --email="new-example@email.com" --domains="example.com" --path="/opt/bitnami/letsencrypt" renew --days 90

をして、今度は新しいメールアドレスを指定したのですが、そうすると以下のエラーが出てしまいました。

Account new-example@email.com is not registered. Use ‘run’ to register a new account.

調べてみると

が引っ掛かり、最終的には上記からリンクされている以下

の以下コマンドが正解でした。

sudo /opt/bitnami/letsencrypt/lego --tls --email="admin@heraldrealty.com.au" --domains="heraldrealty.com.au" --domains="www.heraldrealty.com.au" --path="/opt/bitnami/letsencrypt" run

エラーメッセージで表示されていた Use "run" to register a new account. の run はどこに書けば良いのよ、と思っていたのですが末尾に付ければ良いだけだったのですね。

おわり

以上、取り留めのないメモでした。