発端はcPanelからのエラーメール
レンタルサーバーはミックスホストを利用しています。このレンタルサーバー上で、複数のサイトを公開しています。その中で、いくつか表示を高速化させる目的で無料で使えるCDNのCloudFlareを使用しています。CloudFlareを使用しているドメインを対象にミックスホストのコントールパネルであるcPanelから、以下のメールが届きました。
DNS DCV: No local authority: "cpanel.example.com"; HTTP DCV: "cpanel.example.com" does not resolve to any IP addresses on the internet.
DNS DCV: ローカルオーソリティがありません: "cpanel.example.com"; HTTP DCV: "cpanel.example.com" は、インターネット上のどの IP アドレスにも解決しません。
内容としては、AutoSSLでサーバー証明書を更新するために必要なドメイン認証ができなかったということでした。
この時点で、何かしらの設定をcPanel側かCloudFlare側のどちらにすればいいのか?初めてのことでチンプンカンプンでした。しかし、このまま放っておくと、サーバー証明書の期限が切れて面倒なことになると嫌だなと対処することにしました。
一時的にCloudFlareを無効化してからAutoSSLを更新
海外のサイトにヒントがありました。
日本語訳にしたこのページによると、この問題を解決するには、以下の4つが候補とありました。
- スタンドアロンのSSL証明書を購入する
- cPanelのAutoSSLをオフにして、CloudflareのSSLのみを使う
- CloudflareのSSLはなしで、cPanelのAutoSSLのみを使う
- Cloudflareを一時的に停止してから、AutoSSLの証明書を更新する
私はどちらのSSLも有効なまま使用したいので、迷わず4番を実行することにしました。
手順
1.CloudFlareにログインして、対象のドメインを選択
2.「Overview」メニューを選択し、ページ右下の「Advanced Action」にある「Pause Cloudflare on Site」をクリック
3.「Confirm」をクリック
4.MixhostのcPanelの「SSL/TLS Status」を開き、「Run AutoSSL」ボタンをクリック
5.処理が終わるまで数分待ちます
6.するとエラーが消え更新完了となります
7.最後に、Cloudflareに戻り、「Overview」メニューを選択し、ページ右下の「Advanced Action」にある「Enable Cloudflare on Site」をクリックして有効化
以上。
エラーが残ったままになる場合
cPanelの「SSL/TLS Status」の画面でエラーが一部残ったままになる場合は、CloudflareのDNSにCNAMEまたはAレコードの登録が不足しているのが原因かと思われます。特にサブドメインのURLです。私はこのパターンでした。以下のようにレコードを追加して、再度「Run AutoSSL」を行ってみてください。解消されるはずです。
CNAMEを追加した例
CloudflareのDNS Recordsにサブドメイン名とFQDN(対象ドメイン)を追加
Aレコードを追加した例
CloudflareのDNS Recordsにサブドメイン名とレンタルサーバー(Mixhost)のIPアドレスを追加
この事に繋がるヒントが以下のページにありました。
まとめ
今回のエラーはDNSに対してCNAMEによるドメイン認証、またはhttp通信でコモンネーム(FQDN)をCSRを元に作成したハッシュ値をファイル名にしたテキストファイル(http(s)://ドメイン/.well-known/pki-validation/ハッシュ値.txt)をサイト上で確認したかったが、それをクラウドフレアが邪魔しているといった話のようです。AutoSSLは3ヶ月に一度、サーバー証明書が自動更新される仕組みなので、3か月後もこの作業をしなければならないかもしれません。
今度試してみたいこと(その1)
後からの気づきですが、3ヶ月に1回この作業をするのも面倒なので、Cloudflareに設定を追加して今回のドメイン認証エラーを回避することができるのではないかと思いました。
例えば、
/.well-known/pki-validation
の階層では「キャッシュを無視(スキップ)」、「SSLオフ」、「アプリの無効化」など、考えられるいずれかのルールを追加する- 【効果なし】DNS Recordsにあるドメインを除き、サブドメインのAレコードをすべてCNAMEに変更する
- 【効果なし】DNS Recordsにあるドメインを除き、サブドメインのAレコードをすべて削除する
このどれかで回避できちゃったりするのかもしれませんので、またエラーが出たときに試してみたいと思います。
以下のCloudflareによるDCVのページ(下の階層も含む)にもヒントがありそうです。
今度試してみたいこと(その2)
以下のページではHTTPSへのリダイレクトが原因とありました。これも試してみたいと思います。
- 【効果なし】Cloudflare側のHTTPSの強制をやめる
- 【効果なし】Cloudflare側の
/.well-known/pki-validation
の階層では「SSLオフ」のルールを追加する .htaccess
で/.well-known/pki-validation
階層ではhttpsに転送を除外する
今度試してみたいこと(その3)
Cloudflareの[SSL/TLS]-[オリジンサーバー]-[認証済みOrigin Pull]を「オン」にしてみる。
AutoSSLの更新がうまくいってるドメインのサイトは、ここがONになっていました。次回エラーが出た際はこれを試してみたいと思います。