Azure API Manager如何将客户端证书传递至后端请求?
解决方案:Azure APIM验证客户端证书后将证书传递至后端TLS层
要实现你描述的流程(APIM验证客户端证书后,在TLS层将原客户端证书传递至后端),可结合APIM的证书验证策略和动态后端认证配置,具体如下:
核心思路
APIM在接收请求时终止TLS并完成客户端证书验证,随后在向后端发起新的TLS连接时,将原客户端证书作为APIM的客户端证书提交给后端,让后端在TLS握手阶段获取该证书并完成二次认证。
具体配置步骤
1. 启用APIM的客户端证书验证
在APIM的API入站策略中添加证书验证规则,确保只有合法证书的请求能通过:
<inbound> <!-- 验证客户端证书的链完整性与有效性 --> <validate-client-certificate validateCertificateChain="true" validateCertificateName="true" /> <!-- 将客户端证书存储到变量,供后端策略调用 --> <set-variable name="originalClientCert" value="@(context.Request.Certificate)" /> </inbound>
2. 配置APIM向后端传递证书
在后端策略中,指定使用存储的原客户端证书作为APIM与后端建立TLS连接的客户端证书:
<backend> <!-- 引用存储的原客户端证书,用于后端TLS双向认证 --> <authentication-certificate certificate-variable-name="originalClientCert" /> </backend>
3. 后端服务器配置
确保后端服务器已启用双向TLS认证,要求客户端(即APIM)提供证书。此时后端在TLS握手阶段会收到原客户端的证书,可直接进行二次认证。
关键注意事项
- APIM仅能获取客户端证书的公钥部分,无法获取私钥。因此后端验证时,仅能校验证书的有效性、链完整性及证书属性(如主题、指纹),私钥签名验证已由APIM完成。
- 若客户端证书由私有CA签发,需将该CA证书上传至APIM的受信任根证书库,确保APIM能完成证书验证。
- 需保证APIM与后端信任的根证书一致,否则后端可能无法验证证书链。
替代方案(若上述方式受限)
如果因私钥限制无法通过TLS层传递,可考虑:
- 后端信任APIM的证书,仅由APIM完成客户端证书验证,后端只校验APIM身份(简化流程,但失去后端二次认证能力)。
- 用
set-header策略将证书DER编码内容传入自定义头部(如X-Client-Certificate),后端从头部提取证书验证——这是行业常用的证书传递方式,虽你明确排斥,但仍是可行备选。
内容的提问来源于stack exchange,提问作者Rahber
相关产品推荐
相关产品推荐

