投稿 2022年8月7日
更新 2022年8月28日
専門用語の数:多
環境としてはSynology標準の機能で作成できる、
「Let's Encrypt」を使用していました。
そして自動更新により、運用していました。
ただずっと証明書更新なんて失敗した事無かったのに、
このブログを初めてから急に失敗するようになりました。
全然気づいていなかったため、いきなり証明書の期限が切れ、
ブログどころかDSMにすら繋げなくなりさらに焦りました・・・。
※メールは来てましたが、見てませんでした
証明書更新で失敗していた原因は、ブログを始めたこと、
言い換えると、
アクセスのための80・443番ポートをブログに使用していたこと、
でした。
どうやら証明書更新には、80・443番ポートを使用するようです。
証明書更新のためのレスポンスが、ブログ側へ行ってしまっては、
ただ404になるだけで、何も起きないですよね。
ブログを一時的に止めれば・・・。
と、1番簡単な解決策はそれですね。
80・443番ポートの設定を元に戻せば、証明書更新は成功します。
ただ、普通に考えたら止めたくありません!
ブログ用に独自に設定した、80・443番ポートの設定があります。
そこに、以下の設定を入れます。
location ^~ /.well-known/acme-challenge {
root /var/lib/letsencrypt;
default_type text/plain;
}
この設定を入れ、nginxをreloadすれば
証明書更新の準備は完了です。
nginx -s reload
後は自動更新を待つか、手動で更新するだけです。
SynologyのWEBサーバは、nginxで作動しています。
つまり証明書更新のレスポンスを、受け取るのはnginxです。
そして設定を元に戻せば、更新出来ると言いましたが、
逆を言えば元の設定箇所に、証明書更新の処理が入っているという事です。
実際にデフォルトの設定箇所を見てみると、上記で説明した設定が入っています。
流れとしては、証明書更新してくれ、とリクエストすると、
証明書を更新するためのレスポンスが返ってきます。
34.210.227.78 - - [04/Aug/2022:21:30:56 +0900] "GET /.well-known/acme-challenge/rHLrAAr9ovYrDFnEUG6cNu6HjPgl_0GqX1T_yb5sW9I HTTP/1.1" 200 87 "-" "Mozilla/5.0 (compatible; Let's Encrypt validation server; +https://www.letsencrypt.org)" "-"
18.222.80.197 - - [04/Aug/2022:21:30:56 +0900] "GET /.well-known/acme-challenge/rHLrAAr9ovYrDFnEUG6cNu6HjPgl_0GqX1T_yb5sW9I HTTP/1.1" 200 87 "-" "Mozilla/5.0 (compatible; Let's Encrypt validation server; +https://www.letsencrypt.org)" "-"
23.178.112.209 - - [04/Aug/2022:21:30:56 +0900] "GET /.well-known/acme-challenge/rHLrAAr9ovYrDFnEUG6cNu6HjPgl_0GqX1T_yb5sW9I HTTP/1.1" 200 87 "-" "Mozilla/5.0 (compatible; Let's Encrypt validation server; +https://www.letsencrypt.org)" "-"
3.67.221.149 - - [04/Aug/2022:21:30:56 +0900] "GET /.well-known/acme-challenge/rHLrAAr9ovYrDFnEUG6cNu6HjPgl_0GqX1T_yb5sW9I HTTP/1.1" 200 87 "-" "Mozilla/5.0 (compatible; Let's Encrypt validation server; +https://www.letsencrypt.org)" "-"
設定とアクセスログを合わせて、絶対パスでいうと、
「/var/lib/letsencrypt/.well-known/acme-challenge」
に証明書更新レスポンスが返ってきています。
ちなみに失敗していていた時の、アクセスログはこんな感じです。
23.178.112.103 - - [04/Aug/2022:21:14:19 +0900] "GET /.well-known/acme-challenge/Xj_YmzBO75hSITcZP0PB9U_UWibn62YYO3OAZrx5d1M HTTP/1.1" 404 13769 "-" "Mozilla/5.0 (compatible; Let's Encrypt validation server; +https://www.letsencrypt.org)" "-"
18.222.80.197 - - [04/Aug/2022:21:14:19 +0900] "GET /.well-known/acme-challenge/Xj_YmzBO75hSITcZP0PB9U_UWibn62YYO3OAZrx5d1M HTTP/1.1" 404 13762 "-" "Mozilla/5.0 (compatible; Let's Encrypt validation server; +https://www.letsencrypt.org)" "-"
34.210.227.78 - - [04/Aug/2022:21:14:19 +0900] "GET /.well-known/acme-challenge/Xj_YmzBO75hSITcZP0PB9U_UWibn62YYO3OAZrx5d1M HTTP/1.1" 404 13762 "-" "Mozilla/5.0 (compatible; Let's Encrypt validation server; +https://www.letsencrypt.org)" "-"
ブログ側の設定に考慮を入れていないため、404になってますね。
DocumentRootパスが異なるのが原因です。
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
確認時に使用した、アクセスログのフォーマットです。
※デフォルトのままです。
DSMで証明書更新を行うと、ACME 標準で定義されている
「チャレンジ」を使用して更新しようと試みます。
その中で有名な「HTTP-01 チャレンジ」方式で更新します。
ざっくりした流れは以下のような感じです。
Let's Encryptは証明書更新自体に制限を設けていて、一定期間内に何回試せるかが決められています。
そのため何回も検証することが難しいです。
何回も失敗してしまうと、しばらく更新出来なくなってしまいます。
検証には細心の注意をはらって、作業を行いましょう。
Synologyで証明書が更新できなくなった時の対処法でした。
DSMにすらつなげなくなった時は、ガチで焦りました。
ぜひ皆さんも、サーバ構築楽しんでいきましょう!
以上、ここまで見ていただきありがとうございます。
皆さまの快適な開発ライフに、ほんの少しでもお役に立てれば幸いです。
コメント一覧