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>;