Synologyの証明書更新ができなくてハマった

投稿 2022年8月7日

更新 2022年8月28日

専門用語の数:

Synologyの証明書更新ができなくてハマった

~ 目次 ~

証明書更新に失敗する?

原因

対処法

仕組み

証明書更新回数制限に注意!

まとめ

証明書更新に失敗する?

環境としては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にすらつなげなくなった時は、ガチで焦りました。

ぜひ皆さんも、サーバ構築楽しんでいきましょう!


以上、ここまで見ていただきありがとうございます。

皆さまの快適な開発ライフに、ほんの少しでもお役に立てれば幸いです。

コメント一覧

コメントがまだありません

コメントを投稿してみる

コメント(必須※500文字以内)

お名前(必須※30文字以内)

※日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)