使用 HTTPS ↗ 时,服务器会向客户端出示证书,以便客户端进行身份验证以证明其身份。为了更严格的安全,某些服务要求客户端也出示证书。
此过程(称为 mTLS ↗)将身份验证移至 TLS 协议层,而不是在应用程序代码中管理。来自未授权客户端的连接在 TLS 握手期间被拒绝。
要在与服务通信时出示客户端证书,请在 Worker 项目的 Wrangler 文件中创建 mTLS 证书绑定(binding)。这将允许 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>;