在我的.NET6.0应用程序中,我使用HttpClient连接到由SSL/TLS保护的远程API服务.我的应用程序所在的服务器运行在本地Windows Server 2016环境中,在该环境中,所有传出流量都需要在外部防火墙设备上列入白名单.我显式地允许到远程API端点地址的传出连接,但不允许到任何其他地址的流量.
我使用的是HttpClient的默认行为,这意味着我还没有为ServerCerficateValidationCallback属性提供自定义实现.
令我惊讶的是,到远程端点的连接工作得无懈可击,这是我没有预料到的,因为我没有将流量列入白名单,既没有到远程API的SSL证书颁发机构的CRL端点,也没有到OCSP端点.他们使用的证书是普通的商业证书.我还通过Telnet验证了我无法从运行代码的计算机连接到CRL和/或OCSP端点,
我的印象是,HttpClient在建立到远程端点的连接之前会验证服务器证书,以判断是否:
- 它还没有过期
- 它由其证书列在计算机的受信任根证书颁发机构证书存储中的实体颁发
- 它的CN与域名匹配
- 尚未通过OCSP和/或CLR达到revoked%
考虑到我的实验,后者显然不是这样.谁能向我推荐一份文档,解释HttpClient在认为到远程端点的连接是安全的时考虑了什么?