You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Azure API App与Kestrel在mTLS中是否自动验证客户端私钥持有?

关于Azure API App与Kestrel的mTLS私钥持有验证问题

核心结论

不管是Azure API App的「传入客户端证书」设置,还是Kestrel的ClientCertificateMode配置,TLS协议层面已经自动完成了客户端私钥持有验证——这是双向TLS握手的必备环节,不需要你在应用层额外实现。而你看到的文档描述,指的是应用层的证书属性验证,和私钥持有验证不是一回事。

具体细节拆解

  • Azure API App的「传入客户端证书」设置
    这个设置仅用于控制App Service是否要求客户端提供证书:

    • 设为Required时,App Service前端会强制和客户端完成双向TLS握手,握手过程中会自动验证客户端是否持有对应证书的私钥(验证失败则握手直接中断,请求不会转发到你的应用);
    • 设为Optional时,客户端可以选择提供或不提供证书,若提供证书则同样会完成握手阶段的私钥验证,验证通过后才会将证书转发给你的应用。
      微软文档提到的「App Service仅将证书转发至应用,不做其他处理」,指的是不会帮你验证证书的签发者、有效期、主题等业务相关属性,而非跳过私钥持有验证。
  • Kestrel的ClientCertificateMode设置
    这个配置的作用和API App的设置类似,仅控制Kestrel是否要求客户端提供证书:

    • 设为RequireCertificate时,Kestrel会强制要求客户端完成双向TLS握手,握手过程自动验证私钥持有;
    • 设为AllowCertificate时,客户端可选择提供证书,若提供则完成握手验证私钥。
      之所以Kestrel文档没单独提私钥验证,是因为这是TLS双向认证的标准流程,属于底层协议逻辑,不需要额外配置。

结合你的背景补充

你已经在应用层完成了证书签发者、有效期的验证,而私钥持有验证在TLS握手阶段(不管是App Service前端还是Kestrel处理握手)已经自动完成——因为你的IoT设备需要用TPM存储的私钥完成握手签名,签名不通过的话请求根本到不了应用层。所以你不需要再额外做私钥持有相关的验证逻辑。

内容的提问来源于stack exchange,提问作者Lost_in_IT

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 18:23:15