Cloudflare Access で mTLS を設定すると、次のような場合に役立ちます。
- デバイスに既存の Client Certificates がある。
- Bring Your Own CA(BYOCA) で Access アプリケーションを保護する必要がある。
- Zero Trust ソリューションと連携する必要がある。
CA 証明書は、公開信頼された CA のものでも、自己署名でも構いません。
独自の CA を一から作成 する場合は、次の例の手順に沿って、情報を自分の環境に合わせてください。
ca-csr.jsonという JSON ファイルを作成します。
{
"CN": "Cloudflare Access Testing CA",
"key": {
"algo": "rsa",
"size": 4096
},
"names": [
{
"C": "US",
"L": "LA",
"O": "Access Testing",
"OU": "CA",
"ST": "California"
}
]
}ca-config.jsonという JSON ファイルを作成します。
{
"signing": {
"default": {
"expiry": "8760h"
},
"profiles": {
"server": {
"usages": ["signing", "key encipherment", "server auth"],
"expiry": "8760h"
},
"client": {
"usages": ["signing", "key encipherment", "client auth"],
"expiry": "8760h"
}
}
}
}- 次の cfssl コマンドを実行し、CA 証明書
ca.pemを生成します。
cfssl gencert -initca ca-csr.json | cfssljson -bare ca- Client Certificates を作成するには、次の
client-csr.jsonという JSON ファイルを用意します。
{
"CN": "mtls-access.example.com", # replace with your own hostname
"hosts": ["mtls-access.example.com"], # replace with your own hostname
"key": {
"algo": "rsa",
"size": 4096
},
"names": [
{
"C": "US",
"L": "Austin",
"O": "Access",
"OU": "Access Admins",
"ST": "Texas"
}
]
}- 次のコマンドを実行して Client Certificates を生成します。
client.pem、client-key.pem、client.csrが出力されます。
cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=client client-csr.json | cfssljson -bare client開発者ドキュメント の手順に従います。
ステップ 2 の例を使い、ca.pem を ダッシュボード または Cloudflare API で Cloudflare Access アカウントにアップロードします。
この CA 証明書を使う完全修飾ドメイン名(FQDN / 関連ホスト名)の入力を忘れないでください。
どのクライアントが Client Certificates を送っているかは、クライアント証明書ヘッダーを転送 してオリジンサーバーへ送ることで識別できます。Common Name(CN)、シリアル番号、その他のフィールドとデバイス番号を保存し、追加のチェックやロジックに使えます。
さらに、認証済みリクエストは Cf-Access-Jwt-Assertion JWT ヘッダーもオリジンサーバーへ送ります。ヘッダー値のデコードには jwt.io ↗ を使えます。
最後に、mTLS で保護したいホスト名を Cloudflare Access の セルフホストアプリ として追加し、アクション Service Auth とセレクター "Valid Certificate" を使う Access ポリシー を定義するか、IdP 認証を必須にします。"Common Name"(CN)など、指定したホスト名を期待する追加要件や、ほかの セレクター も使えます。あるいは、外部認可とサーバーレスコンピューティングで ZTNA を拡張 することもできます。
公開と秘密の Client Certificates を同じディレクトリに置き、次の cURL コマンドでアクセスできます。
curl -IXGET --cert client.pem --key client-key.pem https://mtls-access.example.com/HTTP/2 200
server: cloudflare証明書なしだと、次のようになります。
curl -I https://mtls-access.example.com/mtls-testHTTP/2 401
server: cloudflare