ブログに記事を追加しようと思い、WordPressにログインしようと思ったら「この接続ではプライバシーが保護されません」と表示されている。
Let’s Encryptの更新(certbot renew)をかけるのを忘れて、Let’s Encryptの証明書の有効期限が切れてしまうと、Webサイトにこのような画面が表示されます。
通常なら期限切れが近くなると、Let’s Encryptの設定時に登録したメールアドレスにメールで通知が来るのだが、そのメールもチェックしていませんでした。
すぐさまサーバーにSSH接続して「certbot renew」を実行して証明書の有効期限を更新し、各種サービスを再起動してサイトのSSL証明書を有効化させましたが、今後は二度とこのような失態を繰り返さないようにLet’s Encryptの更新をcronで自動化する。
※動作確認環境
CentOS 7.6
Let’s Encryptの更新を行うシェルスクリプトを作成
まずシェルスクリプトを置いておくディレクトリを作成
※これはどこでもOKです。
1 |
# mkdir /tmp4SSL |
シェルスクリプトを作成する。
1 |
# vi /tmp4SSL/SSLRenewCron.sh |
1 2 3 4 5 6 7 8 9 10 11 |
#!/bin/sh /usr/bin/yum -y --enablerepo=epel install certbot python2-acme /usr/bin/certbot renew /usr/bin/systemctl restart proftpd /usr/bin/systemctl restart dovecot /usr/bin/systemctl restart postfix /usr/bin/systemctl restart php-fpm /usr/bin/systemctl restart nginx |
※再起動するサービスは環境によって書き換えてください。(SSLに対応させているサービスは全て再起動が必要です。)
実行権限を付与
1 |
# chmod +x /tmp4SSL/SSLRenewCron.sh |
これでLet’s Encryptの更新を行うシェルスクリプトが完成です。
cronに登録
先ほど作成したシェルスクリプトをcronに登録して自動実行します。
cronを設定するためのエディタを開きます。
1 |
# crontab -u root -e |
以下の設定内容を追加します。
毎週月曜日と木曜日のAM 4:10に「/tmp4SSL/SSLRenewCron.sh」を実行
1 |
4 10 * * 1,4 /tmp4SSL/SSLRenewCron.sh |
Esc→:wq→Enterでエディタを閉じます。(※viの場合)
確認します。
1 2 |
# crontab -l -u root 4 10 * * 1,4 /tmp4SSL/SSLRenewCron.sh |
OKです。cronの登録が完了しました。
まとめ
うっかりミスによるLet’s Encryptの期限切れを防ぐために、SSL証明書の更新作業はcronで自動化しましょう。
Let’s Encryptの設定時に登録したメールアドレスのメールチェックも忘れずに。もし何かしらの事情でcronでの自動更新作業に失敗しても、有効期限切れが迫ったドメインがある場合はメールで通知してくれます。
以上で解決です。