Let's Encryptの証明書を自動で更新する方法

はじめに

先日、仕事で作成させていただいたWebサイトにアクセスできなくなっていました。

原因は、Let's Encryptの証明書自動更新方法に不備があったことでした。

今回はLet's Encryptの証明書自動更新方法について記載します。

暫定対処

Webサイトにアクセスできない状況が長時間続くのはまずいので、調査などは後回しにして暫定対処を行いました。

VPSサーバーに接続し、以下のコマンドを実行しました。

# service nginx restart

これでWebサイトにアクセスできるようになりました。

原因

原因を調査したところ、証明書の更新は行われていましたが、稼働中のWebサーバーに反映されていないことが判明しました。

VPSサーバー上で以下のコマンドを実行したら有効期限は数カ月先になっているのに、Webブラウザでアクセスしたら有効期限が切れていることになっていたのです。

# 有効期限を確認するコマンド
$ certbot-auto certificates

証明書の更新を行ったらWebサーバーを再起動して反映させる必要があります。証明書の更新は行われていましたので、その後のWebサーバー再起動がうまくいっていないことが原因だと考えました。

恒久対処

Webサーバーの再起動がうまくいっていないことが原因だと書きましたが、実は証明書の更新後のWebサーバー再起動はちゃんと設定してあります。

以下がもともと設定してあったcronです。/etc/cron.d/letsencryptに設定しています。

0 0 * * * root /home/user/certbot/certbot-auto renew --post-hook "/sbin/service nginx reload" >> /etc/cron.d/letsencrypt.log
  • 0 0 * * * root:毎日00時00分にrootユーザーで実行します。
  • /home/user/certbot/certbot-auto renew:証明書更新コマンドです。
  • --post-hook "/sbin/service nginx reload":証明書更新後のWebサーバー再起動コマンドです。
  • >> /etc/cron.d/letsencrypt.log:ログ出力です。今回は関係ありません。

このWebサーバー再起動コマンドは間違っています。reloadではなくrestartを使う必要があります。

これを踏まえて以下のように変更しました。

0 4 1 * * root /home/user/certbot/certbot-auto renew --post-hook "/sbin/service nginx restart" >> /var/log/letsencrypt.log
  • 0 4 1 * * root:ついでに毎月1日の04時00分に変更。
  • /home/user/certbot/certbot-auto renew:変更箇所なし。
  • --post-hook "/sbin/service nginx restart":コマンド引数をrestartに変更。
  • >> /var/log/letsencrypt.log:ついでにログ出力先を変更。

これで証明書更新後のWebサーバー再起動が正常に行われるはずです。

この状態でしばらく様子を見てみます。

関連記事

Let's Encryptの証明書更新モードをStandaloneからWebrootに変更する
# はじめに 先日、仕事で作成させていただいたWebサイトがSSL証明書の有効期限切れによりアクセス不可になっていました。 SSL証明書にはLet's Encryptを使用しており、cronに証明書更新コマンドを仕込んで自動更新されるように [...]
2020年3月18日 10:05
【Let's Encrypt】「certbot-auto has insecure permissions!」の原因と対処法
# はじめに SSL証明書の更新コマンドを実行したところ、以下の警告が表示されました。 ```terminal # /path/to/certbot/certbot-auto renew --post-hook "/sbin/servic [...]
2020年1月21日 19:07
Let's Encryptを使用した証明書の自動更新方法を解説
# はじめに 先日、Let's Encryptから以下のメールが届きました。 >Let's Encrypt certificate expiration notice for domain "www.example.com" > >He [...]
2020年1月21日 19:06
Let's Encryptを使用したWebサーバーのSSL化
前提 独自ドメインを取得していること。 参考:Let's Encrypt で Nginx にSSLを設定する 証明書を取得する前 参考にさせていただいた記事では、証明書を取得する際、オプションを追加してスタンドアローンモードを使用しています。 [...]
2019年10月12日 10:41