【问题标题】:SSL Certificate "Issued by" modified by server服务器修改 SSL 证书“颁发者”
【发布时间】:2012-07-03 01:12:00
【问题描述】:

我们有一个 .Net 应用程序,它连接到我们托管的服务器上的 Web 服务,并且我们在这些服务器上绑定到 https/443 的 SSL 证书。有时这些 SSL 证书是自签名的,因此我们并不完全依赖 X509Certificate2.Verify() 方法和我们为 ServicePointManager.ServerCertificateValidationCallback 编程的方法中的 SslPolicyErrors.None 枚举,因为我们的证书并不总是有效。

我们有一个第二步,检查哈希字符串的签名 (X509Certificate.GetCertHashString()) 并将其与“已批准”证书列表进行比较。这样,如果它是一个已知的证书,我们可以为回调返回一个 true。

在我们的一个安装站点中,当我们连接到完全相同的网络服务器时,我们会得到一个不同的哈希字符串。在将 X509Certificate 对象上的每个属性打印到日志文件后,我发现它们连接时的“颁发者”值不同。从他们用户的工作站到他们的网络硬件,然后到我们的服务器,一路上都在修改证书。当我们的应用程序验证证书时,首先它不再是受信任的权威机构,其次当它检查哈希字符串时,它不在批准列表中(更改颁发者似乎会更改哈希)。

任何人都可以提供有关他们如何做到这一点的任何想法吗?此外,知道如何在 .Net 中以编程方式执行此操作吗?

谢谢, 丹

【问题讨论】:

    标签: .net ssl certificate


    【解决方案1】:

    有问题的连接是否可能被处于 SSL 会话中间的企业代理(如 bluecoatwebsense)拦截?

    【讨论】:

      【解决方案2】:

      更改证书会破坏其签名,并且当您的验证表明某些内容会更改证书时,您应该查看什么更改了证书,而不是“如何”完成。

      更改很简单 - 由于证书是自签名的,因此某人可以使用自己的密钥对创建另一个自签名证书,并将不同的主题或颁发者放入证书。没什么大不了的。目标显然是通过安装中间人代理来捕获和解码流量。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-07-30
        • 1970-01-01
        • 1970-01-01
        • 2011-03-10
        • 2019-08-04
        • 2016-03-01
        • 1970-01-01
        相关资源
        最近更新 更多