Let's Encrypt の自動更新について

lets_encrypt02  

 Let's Encryptの公式では、証明書の有効期限の60日前から更新を試みるという事を推奨している。

 

どうやら自動更新は失敗する事もあるらしく、毎月1日の試行だと、失敗した時に速やかに再試行する事が出来ず、再試行が30日後となってしまうため、安全に運用するにはもっと感覚を詰める必要がある。

 

今回あはとりえず、更新に失敗し、証明書を切らしてしまったので、ひとまず手動で更新。

 

Let's Encryptの証明書を手動で更新する

手動で更新

certbot renew --force-renewal

 

nginxの再起動

systemctl stop nginx

systemctl start nginx

 

復旧確認後、自動更新の設定を変更。

 

 

自動更新の設定を変更する

/etc/cron.d/のディレクトリへ移動

cd /etc/cron.d

 

letsencrypt-renewファイルを編集

[ファイルの中身]

0 0 */2 * * root certbot renew --pre-hook "service nginx stop" --post-hook "service nginx start"

 

設定内容は以下

  1. 2日ごとの0時にcertbot renewコマンドが実行される
  2. 証明書の更新が必要な場合は、最初にNginxを停止し
  3. 次に証明書の更新処理が行われ
  4. 最後にNginxが再起動される

 

これなら、60日以内になったときに更新が試行されるので、証明書の有効期限切れを防げるだろう。

 

cronデーモンの再起動

systemctl restart cron

 

有効期間の確認

certbot certificates

 

更新されてればOK。

 

 

/var/www/htmlディレクトリがない場合

Misskeyを設置しているシンVPSにはなぜか/var/www/htmlディレクトリがなかったため、自動更新も手動更新もできなかった。

 

/var/www/htmlディレクトリを作成

mkdir -p /var/www/html

 

nginxがアクセスできるように、ディレクトリの所有者とパーミッションを設定

chown -R www-data:www-data /var/www/html
chmod -R 755 /var/www/html

 

念のため、設定ファイルが正しいか確認

nginx -t

 

エラーがなければ、Nginxを再起動

systemctl restart nginx

 

Certbotを使用して証明書を手動で更新

certbot certonly --webroot -w /var/www/html -d domain.xyz

 

/etc/cron.d/letsencrypt-renew の更新間隔を以下に変更

0 0 */2 * * root certbot renew --pre-hook "service nginx stop" --post-hook "service nginx start"

 

cronデーモンの再起動

systemctl restart cron

 

nginxを再起動

systemctl restart nginx

 

有効期間の確認

certbot certificates

 

更新されてればOK。

 

 

certbotのパスをフルパスにする

0 0 */2 * * root /usr/bin/certbot renew --pre-hook "/usr/sbin/service nginx stop" --post-hook "/usr/sbin/service nginx start"