我正在使用C#.NET,需要在Windows证书库中安装一堆证书。
我需要检查哪些证书是根证书(即自签名),因此我可以将它们安装到“受信任的根证书”存储中。
我正在使用标准X509Certificate2
类。我目前的想法是检查Issuer
和Subject
是否相同。
我注意到X509Certificate2
有Issuer
- IssuerName
和Subject
- SubjectName
。
将Issuer
与Subject
或IssuerName
与SubjectName
进行比较是否更好?或者这不重要吗?
另外,这是一种可靠的方法还是我会更好地使用另一种方法?
答案 0 :(得分:10)
请参阅此帖子:java - Find if a certificate is self signed or CA signed
虽然它不是C#,但解决方案的评论指出
如果主题和发行人相同,则为自签名
表示您对您尝试验证它的方式有所了解。
IssuerName
和SubjectName
返回DistinguishedName
,其中包含RawData
(包含发卡行/主题的原始信息的byte[]
)。您最好比较此字段,但我相信比较Subject
和Issuer
同样有效。
所以,你可以这样写:
public static bool IsSelfSigned(X509Certificate2 cert)
{
return cert.SubjectName.RawData.SequenceEqual(cert.IssuerName.RawData);
}