Let’s Encryptの自動更新失敗?対応方法は?

IT

ぼくの環境(このブログ)は、AWSのbitnamiが提供する[WordPress with NGINX and SSL application]です。この記事では、この環境を使って説明しています。

無償で証明書が発行できるLet’s Encrypt。

昔は有償しかなかったのに、ホントに世の中はどんどん便利になっていきますね。

Let’s Encryptで生成できる証明書の有効期限は90日です。
継続して利用するには有効期限が切れる前に証明書を再作成する必要があります。

Let’s Encryptで証明書を生成すると(bitnami上ではスクリプトの[generate-certificate.sh]のこと)、
中でcronへ3ヶ月の自動更新スケジュールを登録してくれますが、
ぼくの環境では[generate-certificate.sh]を実行したままでは更新されなかったので、対応方法をメモしておきます。

generate-certificate.shの実行

[generate-certificate.sh]を実行するコマンドは以下です。

sudo /opt/bitnami/letsencrypt/scripts/generate-certificate.sh -m [メールアドレス] -d [ドメイン名]
# ↑"/opt/bitnami"はLet's Encryptのインストールディレクトリに書き換えてください

これで証明書の配置まで行ってくれるはずです。

cronの確認

cronはスケジュール起動のサービスのことです。

[generate-certificate.sh]を実行後、 cronに登録されたコマンドを確認しておくことをおすすめします。

cron確認コマンドは以下です。

sudo crontab -l

ただ、一度作成した証明書は有効期限が残り1ヶ月にならないと更新できません

自動で作成されたcronは毎月1日になっていると思うので、3ヶ月目の1日に証明書の有効期限が延長されているか必ず確認するようにしてください。

※crontabの見方
crontab -lで表示される
0 0 1 * * /opt/bitnami/letsencrypt/scripts/renew-certificate.sh
の先頭は、分、時、日、月、曜日を表します。*は毎回を表します。

cornでの更新に失敗している場合

3ヶ月目の1日に証明書の有効期限が延長されていなかったら、以下の内容のスクリプトファイルを作成します。

#!/bin/bash
sudo /opt/bitnami/ctlscript.sh stop nginx
sudo /opt/bitnami/letsencrypt/lego --tls --email="[メールアドレス]" --domains="[ドメイン名]" --path="/opt/bitnami/letsencrypt" renew --days 90
sudo /opt/bitnami/ctlscript.sh start nginx
# ↑"/opt/bitnami"はLet's Encryptのインストールディレクトリに書き換えてください
# ↑stop nginx/start nginxについてもお使いのWebサーバの停止/起動コマンドに書き換えてください


要は、Let’s Encryptのlegoコマンドの前にWebサーバであるnginxを落とす必要があるようです。

例えば、上記のスクリプトを/opt/bitnami/letsencrypt/scripts/renew-certificate.shに作成したら、

sudo chmod +x /opt/bitnami/letsencrypt/scripts/renew-certificate.sh

を実行して、実行権限を付与します。

そしてcrontabに追加します。

sudo crontab -e
0 0 1 * * /opt/bitnami/letsencrypt/scripts/renew-certificate.sh 2> /dev/null

これで再度3ヶ月目の1日に証明書の有効期限が延長されているか確認します。

有効期限が切れてしまった場合

cronでの更新失敗を見逃して、証明書の有効期限が切れてしまった場合、
[generate-certificate.sh]では更新できないので、手動で再作成します。

環境によって異なると思いますが、私の環境での実行例を載せておきます。

※ここまでと同様、Let’s Encryptのインストールディレクトリ、Webサービスの停止/起動などはお使いの環境に合わせて書き換えてください。

sudo /opt/bitnami/ctlscript.sh stop
sudo /opt/bitnami/letsencrypt/lego --tls --email="[メールアドレス]" --domains="[ドメイン名]" --path="/opt/bitnami/letsencrypt" run
sudo mv /opt/bitnami/nginx/conf/server.crt /opt/bitnami/nginx/conf/server.crt.old
sudo mv /opt/bitnami/nginx/conf/server.key /opt/bitnami/nginx/conf/server.key.old
sudo mv /opt/bitnami/nginx/conf/server.csr /opt/bitnami/nginx/conf/server.csr.old
sudo ln -sf /opt/bitnami/letsencrypt/certificates/[ドメイン名].key /opt/bitnami/nginx/conf/server.key
sudo ln -sf /opt/bitnami/letsencrypt/certificates/[ドメイン名].crt /opt/bitnami/nginx/conf/server.crt
sudo chown root:root /opt/bitnami/nginx/conf/server*
sudo chmod 600 /opt/bitnami/nginx/conf/server*
sudo /opt/bitnami/ctlscript.sh start


もし、このブログを読んで不明な点があれば、
ツイッターアカウント に連絡いただければ相談に乗ります。
よろしくお願いしますm(_ _)m


ブログサイトの構築記事はこちらです