Letsencryptの自動更新失敗
このサイトにセキュリティ設定を行うため、3ヶ月前に無料のSSL/TLS証明書発行サービスのLet’s Encryptを導入していた。これによりウェブサイトでのやり取りは暗号化され第三者がモニター出来なくなるという素晴らしいツールと技術。
従来この設定を施すためには有償サービスを利用するしかなかったが、このLet’s Encryptを利用すると無償でサイトの暗号化が実現する。
導入後3ヶ月で証明書の有効期限がきれるので、その前に更新処理を行う必要がある。自分でその更新時期を管理せずとも、Letsencryptを配布している組織から登録したメルアドに、証明書の有効期限が切れる旨何回も通知がくるので安心。
Hello, Your certificate (or certificates) for the names listed below will expire in 0 days (on 24 Dec 17 00:07 +0000). Please make sure to renew your certificate before then, or visitors to your website will encounter errors.
自分の場合はkusanagiを利用していて、そこにはletsencryptの証明書自動更新処理のスクリプトが用意され、何もせずとも更新処理されるはずなので、その通知は当然無視していた。
そして突如サイトへのアクセスが不能になってしまった。
大したアクセス数ではないし、e-commerceをここで運用しているわけでもないのでのんびり構えていた。
夕方重い腰を上げ「lestencrypt nginx kusanagi」をキーワードにググってみると私と同じようなトラブルを抱えていたユーザーの書き込みを幾つか見つけた。調べていくと先ずはletsencryptのログを調べよと言う基本的なことに気づく。これ重要。
cat /var/log/letsencrypt/letsencrypt.log
ということでログを表示させると以下の記述が原因を表しているらしいのがわかった。
StandaloneBindError: Problem binding to port 443: Could not bind to IPv4 or IPv6.
そしてこのキーワードをググると、更新が失敗する理由はNginxの停止に失敗している、という事のようだ。
さらに以下のコマンドで「手動」更新ができるかコマンドラインで試してみた。
# /etc/letsencrypt/certbot-auto certonly --standalone -t
すると既にhogehogeというファイルでletsencryptの設定がなされているが、新規に証明書をつくりますか?というようなメッセージ。さらに新たな証明を既存の証明に上書きする場合はつぎのようなコマンドを使えというご指示。
# /etc/letsencrypt/certbot-auto --duplicate certonly --standalone -t
これを実行し途中サイトのURLを入れるところではwww.run-the-earth.com run-the-earth.comの2つを記述して実行したら以下のとおり成功したというメッセージ
IMPORTANT NOTES: - Congratulations! Your certificate and chain have been saved at: /xxxxx/letsencrypt/xxxx/www.run-the-earth.com/fullchain.pem Your key file has been saved at: /xxxxx/letsencrypt/xxxx/www.run-the-earth.com/privkey.pem Your cert will expire on 2018-03-24. To obtain a new or tweaked version of this certificate in the future, simply run certbot-auto again. To non-interactively renew *all* of your certificates, run "certbot-auto renew"
その後nginxを再起動してbrowserでサイトにアクセスしてもまだサイトが表示されない。
なのでさらにネットで調べると、取得したプライベートキーと公開キーの格納場所をNginx上で設定する必要があるとのこと。なので当該のnginxのSSL設定ファイル上に新しい格納場所を記述しnginxを再起動したところ、ようやくサイトがエラーなく表示された。
未解決な部分として以下の2点が残り、今後突き止めて行かねばならぬ。
- example.com形式のURLの記述ではブラウザーがnginxのwelcomeを表示してしまうというエラー。
- そもそもなぜkusanagiのletsencryptの自動更新スクリプトがNginxの停止を実行できないのか?