5
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

CloudFlare&Let's Encryptで証明書がrenewできなかった

Last updated at Posted at 2021-12-20

はじめに

突然サービスのSSL証明書が切れまして
定期的にrenewするようにcronを設定してたのですが、何が起きたのか。。。

とりあえず解決ができたので、共有をば

要点

まずはcertbotの更新

yum install -y --enablerepo=epel certbot

そして認証局の証明書群のインストール

yum install -y ca-certificates

最後にCloudFlareの設定画面にてフレキシブルを選択

image.png

↑これは気づけなかった...

問題発生

夜中に、いきなりさ、証明書の有効期限切れてるよってLINE〜♪

certbotをcrontabで動かしていて、今まで動いてたんだけどな。。。
切れたのが夜でよかった。。。

確認してみると、以下のように設定しているcrontabがうまく動作していないということが判明

vi /etc/cron.d/certbot
0 0 18 * * root /bin/certbot renew --force-renew --post-hook "systemctl reload httpd"

というわけで、上記を --dry-run つけて実行してみると

/bin/certbot renew --force-renew --dry-run
Starting new HTTPS connection (1): acme-staging-v02.api.letsencrypt.org
Failed to renew certificate foo.bar with error: __str__ returned non-string (type Error)

というエラーが発生しているせいで、 fullchain.pem が更新できていない様子

ログを見てみると

less /var/log/letsencrypt/letsencrypt.log

なんか要するにAPIアクセスが失敗してて、stringに入るべきところに何も入ってない的なことがわかった

こことか見てて、ライブラリの問題があるっぽかったんだけど、なんと残念ながらこちらの環境はpipでライブラリをインストールしているわけじゃない様子だったので、バージョン変更できず。。。

ならば問題の箇所である urllib3 の方でエラー文調べてみると

認証局の証明書群をインストールすると良さそうということが判明

yum install ca-certificates

で、再度 --dry-run で実施

/bin/certbot renew --force-renew --dry-run

するとうまくいった。

というわけでrenew実行。

/bin/certbot renew --force-renew --post-hook "systemctl reload httpd"

cloudflareまでアクセスが進んだが、エラーが変わって、今度は524エラーだった。

Starting new HTTPS connection (1): api.cloudflare.com
Failed to renew certificate foo.bar with error: 524 Server Error:

どうやら、foo.barにアクセスした際に、timeoutしているみたい

問題を発見するまでに調べていた内容で
certbotは証明書発行の際、サービスのURLにアクセスする際にhttpsではなくhttpでアクセスしてくるらしく
http→httpsのリダイレクトを設定しているとうまく証明書更新ができないらしいよ、という記事を見かけていたので、それかな?と推測

推測したはいいものの、リダイレクトの設定なんかWebサーバーのconfでやってなかった(Apache)

ということは、CloufFlare側の設定かな?と思い、コンソールにログインしてみると、SSLの設定項目の中に以下があった

image.png

元々「フル」が選択されており、オリジンサーバーに証明書月リクエストを行なっていたようだったので、今回は「フレキシブル」に変更。

ここでcertbotのrenewを再実行。

/bin/certbot renew --force-renew --post-hook "systemctl reload httpd"

正常に実行されて、サーバーも再起動され、正しくSSLアクセスができることが確認できました。

感想

なんだかんだ1時間半くらいで解決できてよかったけど、夜のLINEは怖いですな。

最近は問題発生したらすぐにQiitaに書いておくようにしているので、この投稿時間が問題の発生時間とほぼ等しいです。

同じことで困っている人がいれば、この記事が助けになっていると嬉しいです。

おやすみなさいー。

5
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?