Let'sEncrypt cronで自動更新設定(CentOS6.4&Apache2.2)

前回(CentOS 6(さくらVPS) Apache2.2にLet’s Encryptの無料SSL導入)でインストールしたLet'sEncrypt のSSL証明書は有効期限が90日。

コマンド一つで更新できるものの忘れてしまう可能性大というわけで、cronで自動更新させることにしました。

まずは更新コマンドのテスト

Let’s EncryptのSSL証明書の更新は「certbot renew」コマンドで行います。

まずはテストオプション「-–dry-run」をつけてコマンドを実行してみます。


/usr/local/certbot-auto renew --dry-run

Congratulations, all renewals succeeded.とあるので、うまくいっているようです。


Saving debug log to /var/log/letsencrypt/letsencrypt.log

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Processing /etc/letsencrypt/renewal/[ドメイン名].conf
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Cert not due for renewal, but simulating renewal for dry run
Plugins selected: Authenticator webroot, Installer None
Renewing an existing certificate
Performing the following challenges:
http-01 challenge for [ドメイン名]
Waiting for verification...
Cleaning up challenges

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
new certificate deployed without reload, fullchain is
/etc/letsencrypt/live/[ドメイン名]/fullchain.pem
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
** DRY RUN: simulating 'certbot renew' close to cert expiry
**          (The test certificates below have not been saved.)

Congratulations, all renewals succeeded. The following certs have been renewed:
  /etc/letsencrypt/live/[ドメイン名]/fullchain.pem (success)
** DRY RUN: simulating 'certbot renew' close to cert expiry
**          (The test certificates above have not been saved.)
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

cronで自動更新設定

cronの編集画面を開く


crontab -e

更新時間の設定

Certbot公式サイトでは1日に2回の実行、更新作業のために1時間以内にランダムな分にしてねと書いてあるようなので、推奨されている実行時間を設定しました。

if you're setting up a cron or systemd job, we recommend running it twice per day (it won't do anything until your certificates are due for renewal or revoked, but running it regularly would give your site a chance of staying online in case a Let's Encrypt-initiated revocation happened for some reason). Please select a random minute within the hour for your renewal tasks.


0 0,12 * * * python -c 'import random; import time; time.sleep(random.random() * 3600)' && /usr/local/certbot-auto renew --no-bootstrap --post-hook "/etc/rc.d/init.d/httpd restart"

さらにhttpdの再起動も追記して保存。ながくなった。

cron が起動しているか念のため確認


/etc/rc.d/init.d/crond status

使用コマンドまとめ

certbot renew を cron 設定した記録のメモさんの記事でまとめてあって、とても便利だと思ったのでまねさせて頂きました。


# SSL 証明書の自動更新テストコマンド
/usr/local/certbot-auto renew --dry-run
# SSL 証明書の自動更新コマンド
/usr/local/certbot-auto renew
# SSL 証明書の自動更新ログ
cat /var/log/letsencrypt/letsencrypt.log

#SSL証明書有効期限確認コマンド
openssl x509 -in /etc/letsencrypt/live/[ドメイン名]/fullchain.pem -noout -dates

# cron 起動確認
/etc/rc.d/init.d/crond status
# cron 編集
crontab -e
# cron 内容確認
crontab -l
# cron 実行ログ確認
cat /var/log/cron |grep certbot

参考にさせて頂いたサイト

Certbot – Centosrhel7 Nginx(公式サイト)
Let'sEncryptの取得&自動更新設定してみた(CentOS7.1&Apache2.4.6)
certbot renew を cron 設定した記録のメモ