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

How can I check if a certificate is self-signed?

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

我需要检查哪些证书是根证书(即自签名),以便我可以将它们安装到 "Trusted root certificates" 商店中。

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

我注意到 X509Certificate2Issuer - IssuerNameSubject - SubjectName

比较IssuerSubject,还是比较IssuerNameSubjectName更好?还是真的不重要?

此外,这是一种可靠的方法还是我使用其他方法会更好?

看到这个post:java - Find if a certificate is self signed or CA signed

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

If the subject and issuer are the same, it is self-signed

表示您尝试验证它的方式是正确的。

IssuerNameSubjectName return 包含 RawDataDistinguishedName (包含 [=32 的原始信息的 byte[] =]).你最好比较这个字段,尽管我 相信 比较 SubjectIssuer 是同样有效的。

所以,你可以这样写:

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