AWS Lightsail の WordPress の SSL証明書(Let's Encrypt)を更新する
February 12, 2022
事の発端(蛇足) #
少し前の話にはなりますが、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 を見つける - Let’s Encrypt
- https://letsencrypt.org/ja/docs/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
を用いて証明書を設定していました。
- Amazon Lightsail の Bitnami スタックに SSL 証明書をインストールする - AWS
- https://aws.amazon.com/jp/premiumsupport/knowledge-center/linux-lightsail-ssl-bitnami/
そのため Account ID の記載したファイルは以下にありました。
/opt/bitnami/letsencrypt/accounts/acme-v02.api.letsencrypt.org/[email protected]/account.json
このファイルを開いてみると以下のようになっていました。先の引用文の通り uri
のところでアカウント ID がわかります。
{
"email": "[email protected]",
"registration": {
"body": {
"status": "valid",
"contact": ["mailto:[email protected]"]
},
"uri": "https://acme-v02.api.letsencrypt.org/acme/acct/321654987"
}
}
SSL 証明書を確認・更新する #
AWS が以下のガイドページを用意してくれています。
- Lightsail インスタンスでホストされている Bitnami スタックで Let’s Encrypt SSL 証明書を更新するにはどうすればよいですか?
- https://aws.amazon.com/jp/premiumsupport/knowledge-center/lightsail-bitnami-renew-ssl-certificate/
まずは現在の 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="[email protected]" --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="[email protected]" --domains="example.com" --path="/opt/bitnami/letsencrypt" renew --days 90
をして、今度は新しいメールアドレスを指定したのですが、そうすると以下のエラーが出てしまいました。
Account [email protected] is not registered. Use ‘run’ to register a new account.
調べてみると
- Unable to renew Let’s Encrypt SSL certificate. Getting Error => Use ‘run’ to register a new account - WordPress - Bitnami Community
- https://community.bitnami.com/t/unable-to-renew-lets-encrypt-ssl-certificate-getting-error-use-run-to-register-a-new-account/75534
が引っ掛かり、最終的には上記からリンクされている以下
- About Let’s Encrypt Renewal - Help - Let’s Encrypt Community Support
- https://community.letsencrypt.org/t/about-lets-encrypt-renewal/145646
の以下コマンドが正解でした。
sudo /opt/bitnami/letsencrypt/lego --tls --email="[email protected]" --domains="heraldrealty.com.au" --domains="www.heraldrealty.com.au" --path="/opt/bitnami/letsencrypt" run
エラーメッセージで表示されていた Use "run" to register a new account.
の run はどこに書けば良いのよ、と思っていたのですが末尾に付ければ良いだけだったのですね。
おわり #
以上、取り留めのないメモでした。