Let’s encryptの証明書更新時のエラー

インフラ, 開発let's encrypt, エラー, 更新

Let’s encryptの証明書期限の20日前になりました

突然メールが届きました。その内容は、let’s encryptで発行した証明書の期限が近づいてきたというものでした。確認すると、let’s encryptの証明書の期限は90日に設定されているようです。

なぜ期限が90日なのか

Let’s encryptの公式サイトによると、

  • 漏洩した秘密鍵や誤発行された証明書が短い期間で無効になる
  • 秘密鍵の危殆化(Key Compromise)や誤発行による被害を抑えることができる
  • 期間は短いが、自動更新をすることができるので、使い勝手が良い

手動更新のやり方

certbot renew

できますが、以下のように、テストをしてから更新することをおすすめします。

certbot renew --dry-run

ちなみに、自分の環境ですと、この段階でエラーが出ました。

更新時にエラーが発生

発行したドメインが書かれている箇所については,{domain}と置き換えています。

Attempting to renew cert (domain) from /etc/letsencrypt/renewal/{domain}.conf produced an unexpected error: Failed authorization procedure. {domain} (http-01): urn:ietf:params:acme:error:unauthorized :: The client lacks sufficient authorization :: Invalid response from http://{domain}/.well-known/acme-challenge/Xw4yyGGXTNxENzM6JttqRQ9WK4hKHwODHIjWC5IDAd8: "<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>404 Not Found</title>
</head><body>
<h1>Not Found</h1>
<p". Skipping.
All renewal attempts failed. The following certs could not be renewed:
  /etc/letsencrypt/live/{domain}/fullchain.pem (failure)

原因は、初回にlet’s encryptで証明書を発行したパスから変更してしまった点です。

/etc/letsencrypt/renewal/{domain}.confを確認してみました。[webroot_map]の箇所が、以前のドキュメントルートのパスになっていたので、現在のドキュメントルートのパスに変更しました。再度、先程実行したコマンドを実行したところ、問題なく成功したので、

sudo systemctl restart httpd

を実行。証明書の確認を行ったところ、現在の日付から90日後に更新がされていました。これで無事解決です。今後は自動更新もできるようにしていきたいと思っています。