Skip to content

非公式本サイトは非公式の日本語ドキュメントであり、Cloudflare 公式サイトではありません。最新情報はdevelopers.cloudflare.comをご確認ください。

Cloudflare Access での mTLS

最終更新 Markdown で表示Agent セットアップ

Cloudflare AccessmTLS を設定すると、次のような場合に役立ちます。

  • デバイスに既存の Client Certificates がある。
  • Bring Your Own CA(BYOCA) で Access アプリケーションを保護する必要がある。
  • Zero Trust ソリューションと連携する必要がある。

1. CA を作成する

CA 証明書は、公開信頼された CA のものでも、自己署名でも構いません。

独自の CA を一から作成 する場合は、次の例の手順に沿って、情報を自分の環境に合わせてください。

  1. 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"
		}
	]
}
  1. 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"
			}
		}
	}
}
  1. 次の cfssl コマンドを実行し、CA 証明書 ca.pem を生成します。
cfssl gencert -initca ca-csr.json | cfssljson -bare ca

2. Client Certificates を作成する

  1. 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"
      }
    ]
  }
  1. 次のコマンドを実行して Client Certificates を生成します。client.pemclient-key.pemclient.csr が出力されます。
cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=client client-csr.json | cfssljson -bare client

3. mTLS の CA 証明書を Cloudflare Access に追加する

開発者ドキュメント の手順に従います。

ステップ 2 の例を使い、ca.pemダッシュボード または Cloudflare API で Cloudflare Access アカウントにアップロードします。

この CA 証明書を使う完全修飾ドメイン名(FQDN / 関連ホスト名)の入力を忘れないでください。

どのクライアントが Client Certificates を送っているかは、クライアント証明書ヘッダーを転送 してオリジンサーバーへ送ることで識別できます。Common Name(CN)、シリアル番号、その他のフィールドとデバイス番号を保存し、追加のチェックやロジックに使えます。

さらに、認証済みリクエストは Cf-Access-Jwt-Assertion JWT ヘッダーもオリジンサーバーへ送ります。ヘッダー値のデコードには jwt.io を使えます。

4. セルフホストアプリケーションを作成する

最後に、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-test
HTTP/2 401
server: cloudflare

役に立ちましたか?