如何通过客户端证书保护Azure Self hosted Gateway上的API免遭未授权访问
客户端证书防护Azure自托管网关API操作指南
前置准备
- 已完成Azure API Management实例部署,且关联配置好自托管网关
- 准备好用于签发客户端证书的根CA证书(测试场景可使用自签CA,生产场景建议使用企业级可信CA)
- 拥有自托管网关所在运行环境的配置权限、API Management实例的管理权限
步骤1:上传根CA证书至API Management
- 进入Azure API Management管理界面,在左侧菜单栏「安全」分类下选择「证书」选项
- 切换到「CA证书」标签页,点击添加按钮
- 上传根CA证书的
.cer格式公钥文件(无需上传私钥),填写自定义证书名称,为自托管网关启用证书链验证选项选择「是」,完成保存 - 等待配置同步至关联的自托管网关,同步周期通常为1-2分钟
步骤2:配置API的客户端证书校验策略
进入需要防护的API的「策略」编辑页面,在入站(inbound)策略段添加客户端证书校验逻辑,示例策略如下:
<policies> <inbound> <base /> <!-- 校验客户端证书是否由信任的根CA签发 --> <validate-client-certificate validate-revocation="false" validate-identity="false" trusted-root-certificate-names="你之前上传的根CA证书的自定义名称" /> <!-- 如需更严格的指纹/主题校验,可添加如下判断逻辑 --> <choose> <when condition="@(context.Request.Certificate == null || context.Request.Certificate.Thumbprint != "允许的客户端证书指纹值")"> <return-response> <set-status code="403" reason="Invalid client certificate" /> </return-response> </when> </choose> </inbound> <backend> <base /> </backend> <outbound> <base /> </outbound> <on-error> <base /> </on-error> </policies>
策略参数说明:
validate-revocation可在你拥有CA的CRL或OCSP吊销校验服务时设置为true,测试场景建议先关闭;trusted-root-certificate-names需和你上传的根CA证书的自定义名称完全一致。
步骤3:自托管网关侧额外配置
- 确认自托管网关的部署配置已开启客户端证书协商:默认自托管网关8081端口已开启TLS与客户端证书协商,如使用自定义端口,需在网关环境变量中配置
negotiateClientCertificate: true - 如自托管网关部署在K8s集群中,需在Ingress/负载均衡层配置客户端证书透传,禁止在Ingress层提前校验客户端证书,否则证书信息无法传递到自托管网关
- 重启自托管网关实例,确保所有配置生效
步骤4:有效性验证
- 不带客户端证书调用目标API,确认返回403状态码
- 使用受信任CA签发的合法客户端证书调用API,确认可正常获取响应
- 使用不受信任的证书调用API,确认返回403状态码
常见问题排查
- 合法证书访问仍返回403:检查上传的根CA证书是否与客户端证书的签发CA一致,策略中填写的CA证书名称是否正确
- 自托管网关未收到客户端证书:检查上层负载均衡/Ingress是否开启了证书透传,网关的客户端证书协商配置是否正常开启
内容的提问来源于stack exchange,提问作者high5
相关产品推荐
相关产品推荐

