CDN

CloudflareでLets Encryptの更新エラーに対応する

Cloudflareを使っていると、サーバー側のLets Encrypt証明書の更新時にエラーになることがあります。このエラーがなぜ起こるのかの原因と対策をまとめました。

Lets Encryptの更新エラーの原因

Cloudflareで「常に HTTPS を使用」がオンになっている

Let’s Encryptの証明書更新は、「HTTP」でサーバーの特定のファイルにアクセスすることで、サーバーの認証をしています。そのため、Cloudflareの「常に HTTPS を使用」機能がオンになっていると、Let’s Encryptの認証サーバーが「HTTP」でアクセスした際に「HTTP”S”」にリダイレクトされてしまい、認証エラーになります。

サーバー側で.well-knownディレクトリがリダイレクトされている

「常に HTTPS を使用」と同じ原因ですが、.well-knownディレクトリがサーバー側でHTTPSにリダイレクトする設定になっていると、リダイレクトループになります。

また、SPAサイトなどで「全てのリクエストをindex.htmlにリダイレクトする」という設定が入っていることでも起こりえるので注意しましょう。

対策

Cloudflareのオリジンサーバー向け証明書を使う

Cloudflareは、オリジンサーバーに向けてクライアント証明書を発行しています。これはCloudflareとオリジンサーバーの間でだけしか使えない証明書ですが、最大で15年間有効です。

クライアント証明書をオリジンサーバーにインストールして使う場合は、CloudflareのSSL設定を「フル」にする必要があります。この設定だと、Page Ruleも使わず、「常に HTTPS を使用」をオンにしたまま利用できます。

Cloudflareで完結させるなら、これが一番簡単で確実な方法です。

HTTPSリダイレクトの対策

CloudflareのHTTPSリダイレクトを回避してLet’s Encryptの証明書を更新するには、

  • 更新時だけプロキシを切る
  • Page Rulesで「常に HTTPS を使用」を制御する
  • 「常に HTTPS を使用」を使わないでサーバーで対処する

の三つがあります。

一番簡単なのは、更新時だけプロキシを切ることですが、3ヶ月に一回作業があるため手間です。

Page Rulesを使う際は、Let’s Encryptがアクセスする「.well-known」ディレクトリだけHTTPSがされないように設定します。ただし、設定が複雑になりがちで除外設定が出来ないので、あまりオススメできません。

ベストなのは「常に HTTPS を使用」を使わないでサーバーで対処する方法です。Cloudflareでは、「サーバー側で設定しないで全てCloudflareで対処せよ」というサポート情報になっていますが、自分でサーバーの設定ができる場合は良いですが、サーバー側が勝手にやる場合なども考えると、手間もなく複雑な設定もないためサーバー側で制御した方が安心です。

最近は、ホスティングサーバー側でも「常にHTTPS化する」という設定があり、サーバー側の設定ではLet’s EncryptのSSLを使っている場合は、「.well-known」ディレクトリだけはスルーするようになっているので、そちらを使いましょう。

サーバーのリダイレクト設定を見直す

ここは単純で、ApacheやNginx、サーバー側のリダイレクト設定などを見直しましょう。基本的には、.well-knownディレクトリの転送設定を除外してHTTPでアクセスできるようにすれば解決するはずです。

また、他の「一括ルーティング系」の設定に「.well-known」ディレクトリが含まれてないかもしっかっりチェックしましょう。


CloudflareでLets Encryptの更新エラーに対応する方法を見てきました。

Cloudflareを使った常時SSL化は非常に便利なのですが、意外とこうした落とし穴があるので慎重に設定するようにしましょう。


価格は記載がある場合を除き、すべて税抜きです。

この記事の関連キーワード

CDNの記事