このページでは、Cloudflare CA が発行していないクライアント証明書の管理方法を説明します。全体像は Cloudflare の mTLS ラーニングパス を参照してください。
独自の CA を持ち込む(BYOCA)は、すでに mTLS を導入済みで、デバイスに クライアント証明書がインストールされている 場合に特に有用です。
- この機能は Enterprise アカウントでのみ利用できます。
- 各 Enterprise アカウントは、最大 5 つの CA をアップロードできます。この上限は Cloudflare Access 経由でアップロードした CA には適用されません。
- CA 証明書の上限は、API Shield、Workers mTLS、Cloudflare Gateway で共有されます。
- 上限を引き上げる場合は、アカウントチームへ連絡してください。
BYOCA は次の場合に適しています。
- すでに内部 CA があり、デバイスにクライアント証明書がインストールされている。
- 証明書の発行量や入れ替わりが多い — たとえば、エフェメラルな仮想マシン、コンテナ、デバイスごとに 1 枚発行する場合。BYOCA では Cloudflare が保存するのは CA 証明書だけで、発行済みの個別証明書は保存しないため、証明書ごとの上限はありません。
- 証明書の有効期間、鍵の種類、失効を、自前の CA ツールで完全に管理したい。
認証するデバイスやサービスが少なく安定している場合は、Cloudflare 管理の CA のほうが設定が簡単です。
CA をアップロードすると、Cloudflare は一定の要件に従って証明書を検証します。
-
CA 証明書は、公開信頼されている CA のもの、または自己署名のものを使用できます。
-
証明書の
Basic Constraintsでは、属性CAをTRUEに設定する必要があります。 -
証明書は、次のいずれかの署名アルゴリズムを使用する必要があります。
使用できる署名アルゴリズム
x509.SHA1WithRSAx509.SHA256WithRSAx509.SHA384WithRSAx509.SHA512WithRSAx509.ECDSAWithSHA1x509.ECDSAWithSHA256x509.ECDSAWithSHA384x509.ECDSAWithSHA512
-
Cloudflare ダッシュボードで、Client Certificates ページを開きます。
Client Certificates を開く ↗ -
Add Certificate を選択します。
-
Certificate Authority ドロップダウンで Bring your own CA を選択します。
-
CA 証明書ファイル(PEM エンコード)をアップロードし、CA の名前を入力します。
-
Continue を選択します。
-
Associate Hostnames ページで、この CA で mTLS 検証を行うホスト名を入力し、それぞれ Add を選択します。この手順はスキップし、あとからホスト名を関連付けることもできます。
-
Save を選択して確定します。
- Upload mTLS certificate エンドポイント で、CA ルート証明書をアップロードします。
-
caboolean 必須- 証明書が CA 証明書であることを示すため、
trueに設定します。
- 証明書が CA 証明書であることを示すため、
-
certificatesstring 必須- CA 証明書に対応する
.pemファイルの内容を入れます。改行は\nに置き換えた 1 つの文字列にします。
- CA 証明書に対応する
-
namestring 任意- CA 証明書の一意な名前を指定します。
-
private_keystring 任意- 証明書の秘密鍵に対応する
.pemファイルの内容を入れます。改行は\nに置き換えた 1 つの文字列にします。
- 証明書の秘密鍵に対応する
- API レスポンスで返る証明書 ID(
id)を控えます。 - Replace Hostname Associations エンドポイント で、その CA で mTLS 検証を行う各ホスト名の mTLS を有効にします。次のパラメーターを使います。
-
hostnamesarray 必須-
クライアント証明書の検証にその CA を使うホスト名を列挙します。
-
-
mtls_certificate_idstring 必須-
前の手順で取得した証明書 ID を指定します。
-
- (任意)GET リクエスト で、CA のホスト名関連付けを確認します。
CA をアップロードしてホスト名を関連付けたら、クライアント証明書の検証を強制するカスタムルールを作成します。 ダッシュボード または API で作成できます。
"expression": "(http.host in {\"<HOSTNAME_1>\" \"<HOSTNAME_2>\"} and not cf.tls_client_auth.cert_verified)",
"action": "block"同じホスト名に、複数の CA(Cloudflare 管理または BYOCA)を関連付けられます。BYOCA 証明書では、最後にデプロイした証明書が優先されます。
Cloudflare 管理の証明書との関連付けを外し、BYOCA 証明書だけを使う場合:
-
Cloudflare ダッシュボードで、Client Certificates ページを開きます。
Client Certificates を開く ↗ -
Cloudflare-issued Client Certificates の Hosts セクションで Edit を選択します。
-
削除するホスト名の横の × を選択します。
-
Save を選択して確定します。
- ホスト名の関連付けを一覧 します。
mtls_certificate_idパラメーターは付けません。
Required API token permissions
At least one of the following token permissions is required:SSL and Certificates WriteSSL and Certificates Read
curl "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/certificate_authorities/hostname_associations" \
--request GET \
--header "Authorization: Bearer $CLOUDFLARE_API_TOKEN"- API が返す
hostnames配列をコピーし、Cloudflare 管理の CA を使わなくするホスト名を削除して更新します。 - Replace Hostname Associations エンドポイント を、
mtls_certificate_idパラメーターなしで呼び出し、Cloudflare 管理の CA に対して操作します。hostnamesには前の手順のリストを使います。
Required API token permissions
At least one of the following token permissions is required:SSL and Certificates Write
curl "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/certificate_authorities/hostname_associations" \
--request PUT \
--header "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \
--json '{
"hostnames": [
"<UPDATED_HOSTNAME_ASSOCIATIONS>"
]
}'以前アップロードした CA を削除する場合は、先にその CA のホスト名関連付けをすべて解除する必要があります。
-
Cloudflare ダッシュボードで、Client Certificates ページを開きます。
Client Certificates を開く ↗ -
BYOCA タブを選択します。
-
削除する CA を見つけ、横の三点リーダーを選択します。
-
関連付けられているホスト名があれば、先にすべて解除します。
-
削除オプションを選択し、確定します。
- Replace Hostname Associations エンドポイント にリクエストします。
hostnamesは空の配列、mtls_certificate_idには CA 証明書 ID を指定します。
"hostnames": [],
"mtls_certificate_id": "<CERTIFICATE_ID>"- Delete mTLS certificate エンドポイント で証明書を削除します。
-
Cloudflare ダッシュボードで、Client Certificates ページを開きます。
Client Certificates を開く ↗ -
BYOCA タブを選択します。
-
確認する CA を見つけ、横の三点リーダーを選択します。
-
Edit hostnames を選択します。Certificate Details パネルに、関連付けられたホスト名が表示されます。
List Hostname Associations エンドポイント を使い、mtls_certificate_id クエリパラメーターにアップロードした CA の証明書 ID を設定します。
Required API token permissions
At least one of the following token permissions is required:SSL and Certificates WriteSSL and Certificates Read
curl "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/certificate_authorities/hostname_associations?mtls_certificate_id=ID_FROM_STEP_2" \
--request GET \
--header "Authorization: Bearer $CLOUDFLARE_API_TOKEN"