通常の TLS は、サーバーの身元をクライアントに対して確認します。相互 TLS(mTLS)は、さらにサーバー側でもクライアント証明書を使ってクライアントの身元を確認します。有効な証明書を提示するデバイスやサービスだけにアクセスを制限できます。
Cloudflare の公開鍵基盤(PKI)でクライアント証明書を作成するか、独自の CA を持ち込む(BYOCA) ことができます。
相互 TLS(mTLS) 認証は、クライアント証明書を使い、クライアントとサーバー間のトラフィックが双方向で安全かつ信頼できることを保証する、一般的なセキュリティ慣行です。mTLS は、ID プロバイダーで認証しないリクエスト(IoT デバイスなど)が、所定のリソースへ到達できることを示す手段にもなります。
ホスト名で mTLS を有効 にすると、Cloudflare は接続元クライアントに有効な証明書の提示を求めます。クライアント証明書は、アクセスを許可するデバイスやサービスにインストールします。
Cloudflare は、アカウント単位で設定した CA に対してクライアント証明書を検証します。検証はアカウント単位のため、各ホスト名で mTLS が有効であれば、同じ証明書をアカウント内の複数ドメインで使えます(例: host.example.com、name.example.net、secure.anotherdomain.test)。
アカウント単位の CA は次のいずれかです。
- Cloudflare 管理の CA: デフォルトです。証明書とホスト名の関連は、Client Certificates ダッシュボード ↗ の Cloudflare-issued タブに表示されます。
- BYOCA 証明書: Enterprise アカウントで利用できます。証明書とホスト名の関連は、Client Certificates ダッシュボード ↗ の BYOCA タブに表示されます。
検証結果は cf.tls_client_auth.cert_verified フィールドに保存されます。
- 成功:
cf.tls_client_auth.cert_verifiedはtrueです。クライアント証明書の詳細は 特定の mTLS フィールド で確認できます。 - 失敗:
cf.tls_client_auth.cert_verifiedはfalseです。
各ゾーンでは、デフォルトで 有効なクライアント証明書を 100 件まで 使えます。クォータに算入されるのは有効な証明書だけです。証明書を失効すると、その枠はすぐ空きます。
クォータを増やすには、API Shield 付きの Enterprise アカウントが必要です。権限が適用されると、デフォルトはゾーンあたり 100,000 件になります。増加を申請するには、アカウントチームに問い合わせてください。
各 Enterprise アカウントは、CA 証明書を 5 件まで アップロードできます。このクォータは API Shield、Workers mTLS、Cloudflare Gateway で共有されます。Cloudflare Access 経由でアップロードした CA には適用されません。Access は別のクォータを使います。
BYOCA の CA クォータの増加を申請するには、アカウントチームに問い合わせてください。
保護対象に応じて、mTLS にはいくつかの実装パターンがあります。より広い概要は mTLS ラーニングパス を参照してください。
- アプリケーションセキュリティ — クライアント証明書に基づいて Web アプリケーションへのアクセスを制限します
- Zero Trust 向け mTLS — Cloudflare Access 経由でユーザーとサービスを認証します
- API Shield での mTLS — 証明書ベースの認証で API クライアントを検証します
- mTLS Workers バインディング — Worker が外部サービスへ接続するときにクライアント証明書を提示します
mTLS Workers バインディングを除き、上記の実装では Cloudflare 管理の CA の代わりに独自の CA を使えます。独自の CA を持ち込む を参照してください。
Worker が外部サービスにクライアント証明書を提示する必要がある場合は、mTLS Workers バインディング を使います。クライアントから Worker へのリクエストを認証する場合は、通常の アプリケーションセキュリティ向け mTLS を参照してください。
flowchart LR
accTitle: クライアントから Worker への mTLS と、Worker から外部サービスへの mTLS
accDescr: Cloudflare Workers で検討できる、2 種類の mTLS 実装を示す図です。
A[クライアント] <--アプリセキュリティ mTLS--> B((Cloudflare))<--mTLS Worker バインディング--> C[(外部サービス)]