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

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

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

最佳答案

如果我对您的理解正确,则您具有证书,并且想要查找颁发者证书。可以按照以下步骤进行操作:

  • 检查叶子证书的“主题”和“颁发者”字段是否不同。否则,证书是颁发者(自签名证书)
  • 使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;
        }
    }
    }
    
  • 关于c# - 检索X509Certificate2对象的颁发者,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33218962/

    10-11 11:59