メニュー

1-10 Let’s Encrypt(Certbot)を使ったSSL/TLS証明書の発行と自動更新設定

Let’s Encrypt=Certbot。

SSL/TLS証明書の発行

Let’s Encryptの導入手順はXserverのマニュアルを参考にした。

dnf install certbot python3-certbot-nginx

Certbotをインストールした後、certbotコマンドからSSL/TLS証明書を取得する。
Nginxを使っているので、certbotコマンドのオプションには「–nginx」を付ける。

certbot --nginx -d <ドメイン名>

コマンド後、Let’s Encryptからメールを受け取るメールアドレスを入力し、利用規約に同意する。

最後にLet’s Encryptのパートナーにメールアドレスを公開していいかどうかを聞かれる。私はNoなのでNを入力して終わらせる。
「Requesting a certificate for <ドメイン名>」のところでしばらく待つ。「Successfully deployed certificate」の案内が来たらSSL/TLS証明書の発行が完了。

サブドメインのSSL/TLS証明書を取得したときの気付き

独自ドメインのあとサブドメインのSSL/TLS証明書を取得するcertbotコマンドを打つと、すぐに「Requesting a certificate for <ドメイン名>」の表示になった。
ドメイン判定かサーバー判定かで前に必要な情報を入力したかどうか判定しているのかもしれない。

SSL/TLS証明書を発行したドメインを確認するとき

どのドメインがSSL/TLS証明書されたのかわからなくなったら「/etc/letsencrypt/live/」を覗いてみること。

SSL/TLS証明書を発行したら自動的にSSLに繋がる

CertbotがNginxのドメイン個別設定ファイルに自動で設定を書き込んでくれているので、サーバー側で手動での非SSL→SSLの対応は特にない。
ただし証明書の自動更新機能はサーバー側で対応すること。

Let’s Encryptは有効期間が90日間(約3ヶ月)の証明書で、スクリプトを設定することによって自動で更新することができます。

https://ssl.sakura.ad.jp/column/free-or-paid/

timerを使ったSSL/TLS証明書の自動更新設定

よく聞くパターンはcronを使った自動更新だが、私はメンターに勧めてもらったtimerでの自動更新を実装することにした。

「/usr/lib/systemd/system/」の中にちゃんとcertbot-renew.timerが入ってた。やったやった。

参考記事の通りにやってみる。CentOS Stream 9でも同様のやり方でOKだった。

timerを有効にする。

systemctl enable --now certbot-renew.timer

「/etc/sysconfig/certbot」ファイルのPOST_HOOKの値を変える。

# POST_HOOK=""
POST_HOOK="--post-hook 'systemctl restart httpd'"

timerを再起動する。

systemctl restart certbot-renew.timer

以下のコマンドで「certbot-renew.service」が表示されていて、「LAST」「PASSED」が反映されていたらtimer設定が完了。

systemctl list-timers
気になるポイント

POST_HOOKにはhttpdを指定してるけど、SSL/TLS証明書の発行でcertbotのオプションにNginxを指定しているので「systemctl restart nginx」でなくていいのだろうか?
今のところ自動更新には問題ないけれど、後々検証してみたいところ。

SSL/TLS証明書の自動更新タイミング

timerでのSSL/TLS証明書の自動更新は60日後くらいに行われる。

以下は2024/5/16にSSL/TLS証明書を発行し、2024/7/16に自動更新されたときの記録。