HttpClient 和服务器证书验证

问题描述 投票:0回答:1

在我的 .Net 6.0 应用程序中,我使用 HttpClient 连接到使用 SSL/TLS 保护的远程 API 服务。托管我的应用程序的服务器在本地 Windows Server 2016 环境中运行,其中所有传出流量都需要在外部防火墙设备上列入白名单。我明确允许到远程 API 端点地址的传出连接,但不允许流量到任何其他地址。

我使用 HttpClient 的默认行为,这意味着我没有为 ServerCertificateValidationCallback 属性提供自定义实现。

令我惊讶的是,与远程端点的连接工作完美,这是我没想到的,因为我没有将远程 API 的 SSL 证书颁发机构的 CRL 或 OCSP 端点的流量列入白名单。他们使用的证书是常规的商业证书。我还使用 telnet 验证了我无法从运行代码的计算机连接到 CRL 和/或 OCSP 端点,

我的印象是 HttpClient 在建立与远程端点的连接之前验证服务器证书以检查是否:

  • 还没过期
  • 它是由其证书列在计算机的受信任根证书颁发机构证书存储中的实体颁发的
  • CN 与域名匹配
  • 尚未通过 OCSP 和/或 CLR 撤销
根据我的实验,后者显然不是这种情况。任何人都可以向我指出一个文档,该文档解释了 HttpClient 在认为与远程端点的连接安全时正在考虑什么?

c# .net ssl dotnet-httpclient
1个回答
0
投票
默认配置的 HttpClient 不会根据远程端点的 CA CRL/OCSP 端点检查证书是否已被吊销。

如果希望进行验证,则需要明确指定

HttpClientHandler.CheckCertificateRevocationList = true


需要仔细评估此设置的性能考虑因素,因为它可能会在与远程端点建立连接时导致额外的延迟。

感谢@Evk为我指明了正确的方向

© www.soinside.com 2019 - 2024. All rights reserved.