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