SSL 証明書の設定・自動更新まとめ 【Let’s Encrypt】

Linux

独自サイトを立ち上げてドメインを取得した際の、SSL 証明書関連の設定手順、コマンドについてまとめておきます。

以下の環境で動作を確認しています。
環境:レンタルサーバー(ConoHa VPS)、CentOS 8、WordPress 等のサイト(SSL 証明書)を設定

背景

サーバーをレンタルして、ウェブサーバーの設定が終わり、独自のサイトが動くようになりました。

独自サイトを設定すると つぎにドメイン発行の手続きと、SSL 証明書発行の設定を行うことになると思います。
これらの設定が完了すると、サイトの URL は http から https に移行することになります。
この SSL 証明書には有効期限がありますので、初回の設定以降の SSL 証明書の更新についても、自動更新できるよう設定をすることになると思います。

とはいえ、SSL 証明書の期限は3か月です。期限の1か月前程度に更新を行うとすると、設定をしてから実際の更新が実行されるまでに約2か月の期間があります。
この最初の2か月間は、自動更新の設定がうまく動くのか動作確認ができない状態が続きます。
また、CentOS 8 では旧バージョンや他の Linux とフォルダ構成が異なっていたり、SSL 証明書の期限があとどれくらいあるのか確認したくなったりするなど、不安になる要素が多いです。
CentOS 8 以降の環境で、SSL 証明書の自動更新について、明確に記載したサイトも少ないようです。

ということで、CentOS 8 以降の環境で、SSL 証明書関連の設定手順やよく使うコマンドをまとめておきます。

2021年8月、10月 追記:
 2021年初旬に、下記のコマンド certbot-auto は非推奨とされたようです。
 とはいえ、2021年8月~10月の時点では、下記の手順で約2か月おきの自動更新が動作しています。
SSL 証明書の更新が急に止まってしまうなどの実用上の不便はないようです。
情報の更新などがあれば、随時アップデートします。

よく使うコマンド:SSL 証明書自動更新

# /usr/local/bin/certbot-auto renew

→ 実行すると、更新が可能な場合は更新されます。
更新されない場合であっても SSL 証明書の期限などが表示されます。

表示の具体例を以下に抜粋しました。
表示される期限(下記の 2021-XX-XX)までに2~3か月程度の期間が残っていれば、自動更新がされており、期限まで余裕があることがわかります。

Cert not yet due for renewal
The following certs are not due for renewal yet:
/etc/letsencrypt/live/ (略) /fullchain.pem expires on 2021-XX-XX (skipped)
No renewals were attempted.

自動更新を強制する場合のコマンド

# /usr/local/bin/certbot-auto renew –force-renew
※ ただし、このコマンドを多用してはいけないとのことです。

自動更新のためのシェル certbot.sh の設定

自動更新のためのシェルスクリプトの作り方についてまとめておきます。
まず、ルートディレクトリに移動してファイルを確認します。
# cd root
# pwd
# ls -al

この root ディレクトリ内で、シェル certbot.sh を作成します。
# vi certbot.sh
certbot.sh の内容

# /bin/sh
cd /root
/usr/local/bin/certbot-auto renew

※ cd /root でルートディレクトリに移って、certbot-auto コマンドを実行して renew する、といったコマンドをそのまま書き出しています。

crontab -e での設定例

Linux でコマンドを自動実行する場合は、crontab で設定できます。
具体的には crontab -e を実行して編集画面とし、このファイルに時刻とコマンドを記載していくことで設定できます。

00 01,02 * * * /root/certbot.sh
05 01 * * * systemctl restart httpd

※ 毎日、深夜 の1:00、2:00 の2回、SSL証明書の更新をトライします。
加えて、念のため、Web サーバ(httpd)をリスタートしておく記載例です。(必須でない)

※ 初回の更新は不安なので、1日に2回実行するようにした記載の一例です。
1日に2回実行すると、ログファイルも2倍増えていきます。
しばらく運用してみて更新がうまくいくようでしたら、2時に実行する部分は削除するなどしてください。
※ 追記、修正が終わったら、vi エディタと同じく、[esc] → “:” → “wq” + [enter] で上書き保存ができます。”wq” としているところで “q!” とすると、書き込みをせず、強制終了できます。

ログの確認方法

まず、以下のコマンドを実行して過去のログファイルの一覧を表示します。
# ls -al /var/log/letsencrypt | more
つぎに以下のコマンドを実行することで、証明書の期限が確認できます。
# cat /var/log/letsencrypt/letsencrypt.log

期限の確認方法
letsencrypt.log ファイルを表示させると、末尾に以下のような表示が見つかると思います。

Cert not yet due for renewal
The following certs are not due for renewal yet:
/etc/letsencrypt/live/ (略) /fullchain.pem expires on 2021-XX-XX (skipped)
No renewals were attempted.
(略): DEBUG:certbot ._internal.renewal failures 

「示されている証明書はまだ更新期限には至っていないので、リニューアル(更新)は行いませんでした。… fullchain.pem の期限は 2021-XX-XX です。… 」という内容になっています。
更新期限(2021-XX-XX)が数か月先になっていること確認しておけばよいことになります。

まとめ

SSL 証明書に関する設定手順、コマンドについて整理しました。
期限が近づいたら正常に更新されていることを確認しましょう。

私の場合、初回の設定から約2か月を経過した時点で、SSL証明書が自動更新されていました。
更新期限は実際の更新日の3か月先程度となっていました。更新期限は3か月ですが、2か月過ぎたあたりで自動更新が実行されますので、実質、約2か月おきに更新されることになります。

これで SSL 証明書関連も、ひと安心です。
他にもサーバーの運用で必要なコマンドなどを関連リンクなどにまとめています。
もし関心があるようでしたら、参考にしてみてください。

関連リンク
・ ファイアーウォール関連でよく使うコマンド 【Linux】
・ Web サーバーのアクセスログの確認方法 【Linux】

タイトルとURLをコピーしました