Cloudflare Zero Trust保護下のレンタルサーバーでSSL(Let’s Encrypt)自動更新を成功させる設定

Web技術

結論(TL;DR)

Cloudflare Access(Zero Trust)でWebサイト全体にアクセス制限をかけると、レンタルサーバー側(スターサーバーやエックスサーバー等)の無料独自SSL(Let’s Encrypt等)の自動更新が失敗するようになります。

これを解決するには、SSL検証用の通信パス(/.well-known/acme-challenge/*)だけを認証対象から除外(Bypass)する設定をCloudflare上に追加します。

この設定を一度行えば、Cloudflareのセキュリティ機能を有効にしたまま、手動作業なしでSSL証明書が自動更新され続ける環境が完成します。

なぜSSLの自動更新が失敗するのか?

1. レンタルサーバー側のSSL発行の仕組み

スターサーバーやエックスサーバーなどの無料独自SSLは、「Let’s Encrypt」などの認証局を利用しています。認証局は、対象のWebサイトが本当に本人のものか確認するために、サイトの特定パス(http://your-domain.com/.well-known/acme-challenge/ファイル名)に一時的な検証ファイルを設置し、外部からHTTPアクセスを行って存在確認(HTTP-01チャレンジ)を行います。

2. Cloudflare Accessが検証アクセスを拒否してしまう

サイト全体にCloudflare Accessを設定すると、この認証局からの検証アクセスも「未ログインユーザー」とみなされ、Googleログイン画面などへリダイレクトされてしまいます。その結果、検証ファイルにたどり着けず、SSLの発行・更新が失敗します。

3. 別の対処法(手動での一時回避)とその問題点

別の対処法として「SSL更新の通知が来たら、一時的にCloudflareのプロキシ(オレンジの雲)をOFF(グレーの雲)にして直接レンタルサーバーに通信を流す」という方法もあります。しかし、90日ごとの更新を毎回手動で行うのは手間がかかり、更新を忘れるとサイトがSSL切れ(セキュリティエラー)になってしまうリスクがあります。

設定手順(Cloudflare最新UI対応)

Step 1: 新規アプリケーションの作成

  1. Cloudflare Zero Trust ダッシュボード にログインします。
  2. 左メニューから 「Access コントロール」 > 「アプリケーション」 を選択します。
  3. 画面右上にある 「+ 新規アプリケーションを作成」 ボタンをクリックします。
  4. モーダル画面が表示されたら、「セルフホストとプライベート」 タブが選択されていることを確認し、右下の 「セルフホストとプライベートで続行」 ボタンをクリックします。

Step 2: 宛先(パブリックホスト名)の設定

表示された設定画面の「宛先」セクションで、認証から除外したいSSL検証用のパスを指定します。

  • パブリックホスト名:
    • サブドメイン: 対象のサブドメイン(例: sub / ルートドメインの場合は空欄)
    • ドメイン: 対象のドメイン(例: example.com
    • パス: .well-known/acme-challenge
      • ※末尾に /* を入力する必要はありません。このパス配下(/.well-known/acme-challenge/*)全体に自動適用されます。

Step 3: Accessポリシーの設定(認証の除外)

画面を下にスクロールし、「Accessポリシー」セクションでアクセス制限をバイパスするルールを作成します。

  1. 「新しいポリシーを作成」 ボタンをクリックします。
  2. 以下の項目を設定します:
    • ポリシー名: Bypass Everyone(任意の分かりやすい名前)
    • アクション: Bypass(※Allow ではなく Bypass を選択)
  3. Configure rules(ルールの設定):
    • Selector: 全員 (Everyone)

Step 4: 詳細とセッション期間の設定

  • 名前: ACME Challenge Bypass
  • セッション期間: 有効期限なし、すぐに期限切れになります (No duration / Immediate)

すべての設定を入力したら、保存をクリックして設定を完了します。

動作確認(curlコマンドでのテスト)

設定反映後、ターミナルから未認証(未ログイン)状態でリクエストを送信し、Bypassが正常に機能しているか検証します。

Bash

curl -I https://sub.example.com/.well-known/acme-challenge/test-token

sub.example.com の部分はご自身の環境のドメインに置き換えて実行してください。

レスポンス判定のポイント

  • 成功(認証がバイパスできている状態):
    • 存在しないファイルに対して HTTP/2 404(またはファイルが存在する場合は HTTP/2 200)など、レンタルサーバーからの生の応答が返却される。
    PlaintextHTTP/2 404 date: Tue, 28 Jul 2026 00:56:05 GMT content-type: text/html server: cloudflare
  • 失敗(Cloudflare Accessで止まっている状態):
    • HTTP/2 302403 が返り、ログイン画面(*.cloudflareaccess.com)へリダイレクトされている。

まとめ

本設定により、以下の運用メリットが得られます。

  • セキュリティとキャッシュの維持: Cloudflareのプロキシ(オレンジの雲)を常にONにしたまま運用可能。
  • 完全自動化: レンタルサーバー側の90日ごとのLet’s Encrypt自動更新がノーメンテナンスで完結。

コメント

タイトルとURLをコピーしました