【问题标题】:How to use C# to determine if a certificate has been issued by the same CA as another?如何使用 C# 确定证书是否由同一个 CA 颁发?
【发布时间】:2011-12-06 11:54:22
【问题描述】:

我们正在将一个可执行文件部署到我们网络之外的合作伙伴站点。可执行文件将从文件夹中动态加载程序集以执行某些任务。

可执行文件将使用我们的 CA 颁发的证书进行签名和时间戳。我想确保可执行文件加载的程序集已由我们的 CA 签名。如何使用 C# 执行此操作?

【问题讨论】:

    标签: c# security code-signing x509certificate x509


    【解决方案1】:

    您需要比较 X509Certificate2 类对应实例的IssuerName 属性。请注意, IssuerName 是对其属性必须进行检查和比较的复杂对象的引用。

    【讨论】:

    • 这可能是一个愚蠢的问题,但由于 IssuerName 只是一个字符串,是什么阻止了它被模拟?
    • @SeanKearon IssuerName 不是字符串,而是 RDN(复杂结构)。 IssuerName 是已签名证书的一部分。如果您验证证书并发现它有效,那么您就知道颁发者名称没有被更改。当然,证书在使用前必须经过验证(并信任它)。
    • 谢谢尤金,非常感谢 :)
    • 我刚刚重新阅读了您对我的评论的回答。很抱歉很痛苦,但是......我要问的不是证书是否被篡改,而是阻止有人设置与我们同名的 CA(CN = MyRootCA,DC = myDC,DC =净)?
    • @SeanKearon 一种方法是同时检查 (a) 主题和颁发者名称,以及 (b) CA 证书的序列号,直至受信任的根。
    【解决方案2】:

    根据证书中的内容,可以通过多种方式选择颁发者。 总结起来就是Exact match、Key match、name match,从严格到少的顺序。

    在精确匹配中,(AKI) 授权密钥标识符扩展与颁发者的主题匹配。此 AKI 可以包含发行者的名称和序列号。

    在密钥匹配中,AKI 仅具有颁发证书的 pub 密钥的哈希值。匹配仅涉及将 AKI 与颁发证书的 SKI 进行比较。

    名称匹配(如果不存在 AKI)是限制最少的。只需将颁发者名称与颁发证书的主题名称进行比较即可。

    作为建议,我建议至少有 AKI。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-26
      • 2014-03-17
      相关资源
      最近更新 更多