如何检查证书是否自签名?

时间:2015-12-09 08:53:50

标签: c# .net certificate self-signed x509certificate2

我正在使用C#.NET,需要在Windows证书库中安装一堆证书。

我需要检查哪些证书是根证书(即自签名),因此我可以将它们安装到“受信任的根证书”存储中。

我正在使用标准X509Certificate2类。我目前的想法是检查IssuerSubject是否相同。

我注意到X509Certificate2Issuer - IssuerNameSubject - SubjectName

IssuerSubjectIssuerNameSubjectName进行比较是否更好?或者这不重要吗?

另外,这是一种可靠的方法还是我会更好地使用另一种方法?

1 个答案:

答案 0 :(得分:10)

请参阅此帖子:java - Find if a certificate is self signed or CA signed

虽然它不是C#,但解决方案的评论指出

  

如果主题和发行人相同,则为自签名

表示您对您尝试验证它的方式有所了解。

IssuerNameSubjectName返回DistinguishedName,其中包含RawData(包含发卡行/主题的原始信息的byte[])。您最好比较此字段,但我相信比较SubjectIssuer同样有效。

所以,你可以这样写:

public static bool IsSelfSigned(X509Certificate2 cert)
{
    return cert.SubjectName.RawData.SequenceEqual(cert.IssuerName.RawData);
}