检索X509Certificate2对象的颁发者

Mik*_*ike 4 .net c# certificate x509certificate

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

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

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

Cry*_*t32 5

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

  1. 检查叶子证书的“主题”和“颁发者”字段是否不同。否则,证书是颁发者(自签名证书)

  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;
        }
    }
    }
    
    Run Code Online (Sandbox Code Playgroud)

  • 仅当您有权访问颁发者证书时,这才有效。 (2认同)