mTLS 認証 で API ホストを指定すると、mTLS 認証用の クライアント証明書 がないリクエストはすべて Cloudflare がブロックします。
mTLS ルールで API または Web アプリケーションを保護する前に、次を完了してください。
- オリジンサーバーにインストールした証明書が、クライアント証明書のホスト名(例:
api.example.com)と一致することを確認します。*.example.comのようなオリジンサーバーのワイルドカード証明書はサポートされていません。 - クライアント証明書を作成します。
- モバイルアプリまたは IoT デバイスを設定し、Cloudflare が発行したクライアント証明書を使います。
- ゾーン内のホストで mutual Transport Layer Security(mTLS)を有効にします。
-
Cloudflare ダッシュボードで Client Certificates ページを開きます。
Client Certificates を開く ↗ -
Create a mTLS rule を選択します。
-
Custom rules では、いくつかのルールパラメーターがすでに入力されています。保護する URI パスを Value に入力します。
-
(任意)
Hostnameフィールドを追加し、保護する mTLS 有効なホスト名を Value に入力します。 -
Choose action で
Blockを選択します。 -
Deploy を選択して、ルールを有効にします。
mTLS ルールをデプロイすると、有効なクライアント証明書 がないリクエストはブロックされます。
Expression Builder で mTLS ルールを確認するには、ルールに対応する レンチアイコン を選択します。
Expression Preview では、mTLS ルールは and 演算子で結合した 2 つの 単純式 からなる 複合式 になります。
最初の式 not cf.tls_client_auth.cert_verified は、API または Web アプリケーションへのリクエストが有効なクライアント証明書を提示しないときに true を返します。
2 番目の式は、http.request.uri.path フィールドと in 演算子を組み合わせ、mTLS ルールの対象となる URI パスを指定します。
ルールの アクション が Block のため、有効なクライアント証明書を提示したリクエストだけが指定ホストにアクセスできます。
発行者の Subject Key Identifier(SKI)ハッシュも検証することを推奨します。このチェックがないと、どの認証局(CA)が発行したかに関係なく、有効なクライアント証明書はすべて受け入れられます。SKI ハッシュを追加すると、特定の CA が発行した証明書にアクセスを制限できます。
次のような式で実装できます。
not (cf.tls_client_auth.cert_verified and cf.tls_client_auth.cert_issuer_ski eq "A5AC554235DBA6D963B9CDE0185CFAD6E3F55E9F")mtls.crt ファイルに保存したクライアント証明書の発行者 Subject Key Identifier(SKI)ハッシュを取得するには、次の OpenSSL コマンドを実行します。
openssl x509 -noout -ext authorityKeyIdentifier -in mtls.crt | tail -n1 | tr -d ': 'A5AC554235DBA6D963B9CDE0185CFAD6E3F55E9F失効したクライアント証明書 を確認するには、新しい mTLS ルールを追加するか、デフォルトルール に式を追加します。失効証明書の確認には Expression Builder が必要です。
リクエストに失効した証明書が含まれると、cf.tls_client_auth.cert_revoked フィールドは true になります。デフォルトの mTLS ルール と組み合わせると、次のようになります。
((not cf.tls_client_auth.cert_verified or cf.tls_client_auth.cert_revoked) and http.request.uri.path in {"/admin"})