記事概要
ブログの運用期間が長くなってきた先日、Let’s Encryptで発行したSSL証明書の期限がいつの間にか切れていました。
日々確認することは現実的ではないので、自動更新できるように設定したので、そのやり方を記載します。
証明書発行に関する内容は下記のページを参考にしてください。
前提条件
本手順は、サイトで紹介している「WordPress with NGINX and SSL Certified」を前提としています。
初期導入の方法については、以下の記事前編を参考に構築してください。
※類似環境であれば同様の手順で実行できると思います。
また、Linuxの基本操作はある程度できる方を前提としています。
Linuxのログインの仕方やviの使い方は別途お調べください。
自動化の仕様と事前準備
毎月1日の夜間にSSL証明書を自動更新します。また合わせて実行ログも出力します。
注意点として、SSL証明書を更新する際、nginxを停止する必要があります。
今回は夜間としていますが、実行する時間には気を付けてください。
時刻は、dateコマンドで確認できます。クラウド環境の場合UTCで設定されている場合が多いので気をつけましょう。
タイムゾーンの変更は以下のコマンドで行うことができます。
# timedatectl set-timezone Asia/Tokyo
実施手順
サーバへSSHログイン後、まずはディレクトリを作成します。
# sudo su -
# mkdir -p /ssl/script
# mkdir -p /ssl/log
作成したディレクトリに以下のスクリプトを作成します。
※ファイル名は任意で構いません。
# vi /ssl/script/auto-renew.sh
shファイル編集画面で、以下の自動更新スクリプトのコードを記載します。
#!/bin/bash
Mail="メールアドレスを記載"
Domain_root="サイトのドメイン名を記載(サブドメインが必要な場合は同じ内容の別名変数を用意)"
Log="/ssl/log/ssl-renew.txt"
date '+%Y-%m-%d %H:%M:%S' >> ${Log}
/opt/bitnami/ctlscript.sh stop nginx >> ${Log}
/opt/bitnami/letsencrypt/lego --path="/opt/bitnami/letsencrypt" --tls --email=${Mail} --domains=${Domain_root} renew --days 90 >> ${Log}
/opt/bitnami/ctlscript.sh start nginx >> ${Log}
スクリプトの権限を変更します。
# chmod -R 775 /ssl/script/
# chmod -R 755 /ssl/log
cron実行ファイルを作成します。
# vi /etc/cron.d/ssl
実行ファイル編集画面で、以下のcronコードを記載します。
HELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
LANG=ja_JP.UTF-8
LC_ALL=ja_JP.UTF-8
CONTENT_TYPE=text/plain; charset=UTF-8
0 5 1 * * root /bin/sh /ssl/script/auto-renew.sh 2> /dev/null
cronを再起動します。
# /etc/init.d/cron restart
後は待つだけで毎月1日に更新が行われます。
実行後の確認
設定した日(今回の場合は毎月1日)の後、実行後以下のコマンドを実行し、ログを確認します。
# cat /ssl/log/ssl-renew.txt
1日に実行されたログファイルが、[INFO]と表示され正常に終了していることを確認します。
2021/09/01 05:00:21 [INFO] [xxxxx] Server responded with a certificate.
最後にウェブページを確認して期限が更新されているか確認します。
まとめ
簡単ですが、以上で自動更新ができます。
やっていることは単純ですが、SSL証明書はウェブページにおいてとても重要な役割を持っていますので、更新し忘れがないように気をつけましょう。