テックブログ

Let’sEncrypt証明書の期限がきれていた件

こんにちは。運用チームのMBです。
掲題のとおり、検証環境のLet’sEncryptの証明書期限がきれていたので、記事にしてみます。

原因

WEBへの許可を国内IPに限定していたため、認証ができずに更新が失敗していた。

概要

ファイアウォールに国内IPのみ許可の設定をしたら、Let’s Encryptの自動更新が失敗していた。
検証環境のためにDNS認証でbind側のゾーンファイルを自動で更新はしたくない。
ファイル認証を維持しつつも、httpも通常利用継続していきたい。
(変なリダイレクトとか限定公開とかしないで利用したい)

結論

更新処理時に一時的に80を許可する設定を追加する

hookの種類

certbot renew には pre-hook / post-hook / deploy-hook があり、pre/post は更新対象があるときだけ
更新処理の前後に実行され、deploy-hook は更新成功時だけ 実行される模様。

具体的には下記のディレクトリにスクリプトを設置しておけばよさそう。
[root@test-alma9 ~]# ll /etc/letsencrypt/renewal-hooks/
合計 12
drwxr-xr-x 2 root root 4096 11月 3 14:03 deploy
drwxr-xr-x 2 root root 4096 11月 3 14:03 post
drwxr-xr-x 2 root root 4096 11月 3 14:03 pre

スクリプト設置

[root@test-alma9 ~]# vi /etc/letsencrypt/renewal-hooks/pre/open-http01-nft.sh
[root@test-alma9 ~]# vi /etc/letsencrypt/renewal-hooks/deploy/reload-httpd.sh
[root@test-alma9 ~]# vi /etc/letsencrypt/renewal-hooks/post/close-http01-nft.sh
[root@test-alma9 ~]#

[root@test-alma9 ~]# chmod 700 /etc/letsencrypt/renewal-hooks/pre/open-http01-nft.sh
[root@test-alma9 ~]# chmod 700 /etc/letsencrypt/renewal-hooks/deploy/reload-httpd.sh
[root@test-alma9 ~]# chmod 700 /etc/letsencrypt/renewal-hooks/post/close-http01-nft.sh
[root@test-alma9 ~]#

それぞれの概要

スクリプト実行タイミングスクリプト概要
/pre/
open-http01-nft.sh
更新対象があり、
更新を試みる前に実行
nftで80ポート全開放
/deploy/
reload-httpd.sh
実際に証明書が
更新できたときだけ実行
apache再起動
/post/
close-http01-nft.sh
更新処理の試行後に実行
nftで80ポート全開放を解除

期待

これで更新処理の時だけ80ポートを解放し、
更新が終わったら元々のルール(国内IPのみ許可)に戻るはず。

無事更新

後日確認したら無事に更新され、nftablesの一次許可もちゃんと削除されていました。

おわりに

本当はTLSバージョン関連の記事を書こうと思ってたのですが、いざ検証環境で進めようとしたところ
今回の証明書の期限切れに気づき、折角なので掲載した次第となります。

証明書の期限短縮にともない、自動化の導入を進めている企業様が多いかと存じます。
環境によって様々な実装パターンがあるので、よく事前確認することが大切だと感じています。
一任いただけましたら、責任をもって導入~管理いたしますのでご検討いただけますと幸いです。

それでは、今回はこの辺で失礼いたします!

この記事をシェアする

  • facebook
  • twitter
  • hatena
  • line
URLとタイトルをコピーする

実績数30,000件!
サーバーやネットワークなど
ITインフラのことならネットアシストへ、
お気軽にご相談ください