我们有一个.Net应用程序连接到我们托管的服务器上的Web服务,我们在这些服务器上绑定了https / 443的SSL证书。有时这些SSL证书是自签名的,因此我们不完全依赖于我们为ServicePointManager.ServerCertificateValidationCallback编程的方法中的X509Certificate2.Verify()方法和SslPolicyErrors.None枚举,因为我们的证书并不总是有效的。
我们有一个辅助步骤,检查哈希字符串的签名(X509Certificate.GetCertHashString()),并将其与“已批准”证书列表进行比较。这样,如果它是已知证书,我们可以为回调返回true。
在我们的一个安装站点中,当连接到完全相同的Web服务器时,我们会得到一个不同的哈希字符串。在X509Certificate对象的每个属性上打印到日志文件后,我发现连接时“颁发者”值不同。从用户的工作站到网络硬件,然后到我们的服务器,一路上正在修改证书。当我们的应用程序验证证书时,首先它不再是受信任的权限,第二次检查哈希字符串时,它不在批准的列表中(更改发行者似乎更改了哈希)。
任何人都可以提供有关他们如何做到这一点的任何想法吗?此外,任何想法如何在.Net中以编程方式进行?
谢谢, 丹