繁体   English   中英

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

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

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

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

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

我注意到X509Certificate2Issuer - IssuerNameSubject - SubjectName

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

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

请参阅此文章: java - 查找证书是自签名还是CA签名

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

如果主题和发行者是相同的,则它是自签名的

意味着你对你试图验证它的方式是正确的。

IssuerNameSubjectName返回一个DistinguishedName ,其中包含RawData (包含发行者/主题的原始信息的byte[] )。 你最好比较这个领域,但我相信比较SubjectIssuer同样有效。

所以,你可以这样写:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM