【问题标题】:Retrieving issuer of a X509Certificate2 object检索 X509Certificate2 对象的颁发者
【发布时间】:2016-01-18 01:38:34
【问题描述】:

我有一个从 X509Store 检索到的 X509Certificate2 对象。我想获得此证书的颁发者,但该对象提供的唯一两个属性是 X509Certificate2.IssuerX509Certificate2.IssuerName 其中.Issuer 有点误导,因为它返回基本上是颁发者名称的字符串。

这两个属性最多可以返回一个Distinguished Name,但 DN 不是唯一的,对吧?因此我不想使用带有X509FindType.FindByIssuerDistinguishedName 标志的X509Certificate2Collection.Find 方法。

如何获得证书的颁发者并确保我拥有“正确的颁发者”。注意:我不必使用 X509Certificate2 对象。欢迎使用替代品。

【问题讨论】:

    标签: c# .net certificate x509certificate


    【解决方案1】:

    如果我理解正确的话,你有一个证书,你想找到颁发者证书。这可以按如下方式完成:

    1. 检查叶证书的 Subject 和 Issuer 字段是否不相同。否则,证书是颁发者(自签名证书)

    2. 初始化X509Chain 对象并将叶子证书传递给X509Chain.Build 方法。检查 ChainElements 属性(一个集合),索引 1 处的元素是颁发者。

      using System.Security.Cryptography.X509Certificates;
      
      namespace Name {
          class Class1 {
          public static X509Certificate2 GetIssuer(X509Certificate2 leafCert) {
              if (leafCert.Subject == leafCert.Issuer) { return leafCert; }
              X509Chain chain = new X509Chain();
              chain.ChainPolicy.RevocationMode = X509RevocationMode.NoCheck;
              chain.Build(leafCert);
              X509Certificate2 issuer = null;
              if (chain.ChainElements.Count > 1) {
                  issuer = chain.ChainElements[1].Certificate;
              }
              chain.Reset();
              return issuer;
          }
      }
      }
      

    【讨论】:

    • 就是这样! X509Chain 是解决方案。
    猜你喜欢
    • 1970-01-01
    • 2013-07-28
    • 2017-10-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多