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

8

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

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

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

我注意到X509Certificate2Issuer - IssuerNameSubject - SubjectName

比较IssuerSubject,还是比较IssuerNameSubjectName更好呢?或者说没有什么区别吗?

此外,这种方法可靠吗?还是我最好采用其他方法?

1个回答

14

请参考这篇文章:java - 如何判断证书是自签名还是由CA颁发的

虽然这不是C#相关的内容,但该解决方案的评论指出

 

如果主题和颁发者相同,则为自签名。

这意味着您正在尝试验证的方式是正确的。

IssuerNameSubjectName 返回一个 DistinguishedName,其中包含 RawData(一个包含颁发者/主题原始信息的 byte[])。最好比较此字段,尽管我认为比较 SubjectIssuer 也同样有效。

因此,您可以编写类似于以下内容的代码:

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

这只是一种惯例,并不能证明证书实际上是自签名的。 - Mike Rosoft

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接