👻

Cloudflare DNS Proxy モードとSSL/TLS Encryptionモード

2023/05/11に公開

Cloudflare DNS Proxy モードは Cloudflare 独自の機能で、こちらに詳細をまとめていますが、シンプルに言うと、Cloudflareでオリジンのドメインに対するCNAMEをセットすると、名前解決でCloudflare側のIPアドレスがAレコードとして戻ってきます。

類似の動きをするALIASレコードと異なり、戻るIPはオリジンではなくCloudflareのエッジIPアドレスであること、digコマンドでもオリジンのドメインやIPアドレスが隠匿されること、が特徴です。

オリジンのドメインをa.com,クラウドフレア側のドメインをb.comとした場合、ユーザーはb.comにアクセスをすることになります。そこからオリジンへの通信はCloudflare内部ネットワークを通ります。

SSL/TLS Encryptionモード
上記の動きをする場合、クライアントブラウザが行うTLSネゴシエーションはa.comではなく、b.comと行われます。Cloudflareでは自動でDV(domain validation)証明書がb.comにセットされます。外部の電子証明書をb.comにセットすることももちろん可能です。その場合OVやEVもセット可能です。

この時に、b.comでTLSを終端させ、a.comへの通信は非TLS/HTTPを用いるのか、TLS/HTTPSを用いるのか、の設定行うのがSSL/TLS Encryptionモードです。

Off (not secure): b.comとの通信は非TLS/HTTPです。
Flexible: b.comとの通信はTLS/HTTPSですが、a.comへの通信は非TLS/HTTPです。
Full: b.com,a.com共にTLS/HTTPS通信がデフォルトとなりますが、証明書の検証は曖昧です。オリジンが非TLS/HTTPを許可し、なおかつクライアントブラウザがHTTPを要求した場合、a.comへのHTTP接続が許可されます。
Full (strict): 上記と同様ですが、証明書は正しく検証されます。
(証明書を発行している認証局があらかじめ信頼されている必要があります)
Strict (SSL-Only Origin Pull): b.com,a.com共にTLS/HTTPS通信がデフォルトとなり、証明書も正しく検証されます。

Amazon EC2等をOriginとして検証したいとき、a.comへのTLS用電子証明書は自動で作成されませんので、Flexibleモードが便利です。この設定はb.com全体に設定されます。

ここのサブドメインを加えて考えると少し話がややこしくなります。
c.a.com,d.a.com,e.a.com二つが存在する場合を考えます。

例外処理ルールの上書き
例えば、クライアントブラウザ→b.com→x.a.comへの通信は全体でTLS/HTTPSを必須としたいで、fullモードを指定しますが、e.a.comのみは非TLS/HTTP通信を許可したい場合です。
この場合以下の手順で例外処理の設定が可能です。

RulesPage Rulesをクリックします。

Create Page Ruleを押します。
以下のようにルールを投入します。

そうすると、e.a.comのみ非TLS/HTTP通信が許可されますが、その他c.a.com,d.a.comはfullモードが適応されます。

Discussion