Scribble at 2020-11-20 13:48:49 Last modified: 2020-11-22 21:15:52
Let's Encrypt を使っていて certbot renew しても証明書を更新できずにエラーとなる場合、確認したほうがいいのは次のような諸点だ。たいてい、Let's Encrypt からは HTTP 通信でアクセスして検証しているのに、HTTPS を強制されてしまうことが原因だからだ。
・一も二もなく、まずは httpd や letsencrypt ディレクトリ(に入ってることが多い)のログを見ること。
・httpd の設定で、Strict-Transport-Security がヘッダーとして返されると HTTPS を強制してしまうので、これは一時的にコメント・アウトする。
・もちろん、mod_rewrite などで http から https に転送している場合は、設定を一時的に無効とする。
・ブラウザで HTTP/HTTPS のアクセスを確認する場合、EFF の HTTPS Everywhere みたいな HTTPS を強制するプラグインが入っていない状態で使う。せっかく HTTP 通信できるように修正しても、ブラウザで「まだ HTTPS を強制している」と早合点して間違った対策をさらに施してしまう恐れがある。
なお、証明書を更新したあとで再びサイトの HTTPS 接続を強制するのであれば、そういう状況で cron を使って certbot を動かすのは、はっきり言って愚行でしかない。仮に更新できるタイミングになってもエラーを吐き続けるだけなので、そのエラーによるメールの通知をきっかけにして証明書を更新するなんて馬鹿な運用は見直すべきだろう。