Skip to content

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

mTLS

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

HTTPS では、サーバーが証明書を提示し、クライアントがその身元を認証します。さらに厳しいセキュリティが必要なサービスでは、クライアント側にも証明書の提示を求めます。

この処理は mTLS と呼ばれ、認証をアプリケーションコードではなく TLS のプロトコル側へ移します。未認可クライアントからの接続は、TLS ハンドシェイクの段階で拒否されます。

サービスと通信するときにクライアント証明書を提示するには、Worker プロジェクトの Wrangler 設定ファイルに mTLS 証明書 バインディング を作成します。これにより、Worker があなたに代わってサービスへクライアント証明書を提示できます。

まず、wrangler mtls-certificate コマンドで、証明書とその秘密鍵をアカウントにアップロードします。

npx wrangler mtls-certificate upload --cert cert.pem --key key.pem --name my-client-cert

次に、Worker プロジェクトの Wrangler 設定ファイルを更新し、mTLS 証明書バインディングを作成します。

{
	"mtls_certificates": [
		{
			"binding": "MY_CERT",
			"certificate_id": "<CERTIFICATE_ID>"
		}
	]
}
[[mtls_certificates]]
binding = "MY_CERT"
certificate_id = "<CERTIFICATE_ID>"

mTLS 証明書バインディングを追加すると、Worker の環境に変数が追加され、その変数で fetch() メソッドを使えます。この fetch() は標準の Fetch API を使い、グローバルな fetch とまったく同じシグネチャです。ただし、TLS 接続の確立時には常にクライアント証明書を提示します。

インターフェイス

export default {
	async fetch(request, environment) {
		return await environment.MY_CERT.fetch("https://a-secured-origin.com");
	},
};
interface Env {
  MY_CERT: Fetcher;
}

export default {
    async fetch(request, environment): Promise<Response> {
        return await environment.MY_CERT.fetch("https://a-secured-origin.com")
    }
} satisfies ExportedHandler<Env>;

役に立ちましたか?