おはようございます。FRONTL1NE運営チームのFL1NEです。
今朝から発生していたSSL証明書エラーの関係でサイトをご利用いただいている皆様にご不便おかけしましたことをお詫び申し上げます。
今回のエラーの原因と対策をここに書いておきます。
何が起きたのか
「Let’s EncryptのTLS-SNI-01を利用した認証終了に伴う証明書の更新エラー」
FRONTL1NE.NET及び子サーバーではLet’s Encryptを利用してSSL証明書を入手しています。
Let’s Encryptの証明書は3ヶ月で期限切れになるため、1ヶ月毎にcronで自動更新を行なっていました。
証明書更新の際に行われる認証はTLS-SNI-01(443ポートを利用したチャレンジ&レスポンス)を利用していましたが、TLS-SNI-01の脆弱性が見つかり、Let’s Encrypt側がTLS-SNI-01での認証を終了したため証明書の期限切れでおきたエラーです。
対策
nginx内で80(HTTP)で受けたリクエストを全て301で443(HTTPS)に飛ばしていましたがそれをやめ、認証用の /.well-known/acme-challenge
へ来たリクエストをそのまま80で返すようにnginxのコンフィグを変更しました。
変更は以下の通りです。
server {
listen 80;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl http2;
#設定色々
}
↓
server {
listen 80 default_server;
location ^~ /.well-known/acme-challenge/ {
default_type "text/plain";
root /opt/acme;
}
location / {
return 301 https://$host$request_uri;
}
}
server {
listen 443 ssl http2;
#設定色々
}
参考文献
Let’s EncryptのTLS-SNI-01認証のバリデーションに伴う対応策まとめ | DesignSupply.
コメント