如何检查证书是否是自签名的?
How can I check if a certificate is self-signed?
我正在使用 C#.NET 并且需要将一堆证书安装到 Windows 证书库中。
我需要检查哪些证书是根证书(即自签名),以便我可以将它们安装到 "Trusted root certificates" 商店中。
我使用的是标准 X509Certificate2
class。我目前的想法是检查 Issuer
和 Subject
是否相同。
我注意到 X509Certificate2
有 Issuer
- IssuerName
和 Subject
- SubjectName
。
比较Issuer
和Subject
,还是比较IssuerName
和SubjectName
更好?还是真的不重要?
此外,这是一种可靠的方法还是我使用其他方法会更好?
看到这个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
表示您尝试验证它的方式是正确的。
IssuerName
和 SubjectName
return 包含 RawData
的 DistinguishedName
(包含 [=32 的原始信息的 byte[]
=]).你最好比较这个字段,尽管我 相信 比较 Subject
和 Issuer
是同样有效的。
所以,你可以这样写:
public static bool IsSelfSigned(X509Certificate2 cert)
{
return cert.SubjectName.RawData.SequenceEqual(cert.IssuerName.RawData);
}
我正在使用 C#.NET 并且需要将一堆证书安装到 Windows 证书库中。
我需要检查哪些证书是根证书(即自签名),以便我可以将它们安装到 "Trusted root certificates" 商店中。
我使用的是标准 X509Certificate2
class。我目前的想法是检查 Issuer
和 Subject
是否相同。
我注意到 X509Certificate2
有 Issuer
- IssuerName
和 Subject
- SubjectName
。
比较Issuer
和Subject
,还是比较IssuerName
和SubjectName
更好?还是真的不重要?
此外,这是一种可靠的方法还是我使用其他方法会更好?
看到这个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
表示您尝试验证它的方式是正确的。
IssuerName
和 SubjectName
return 包含 RawData
的 DistinguishedName
(包含 [=32 的原始信息的 byte[]
=]).你最好比较这个字段,尽管我 相信 比较 Subject
和 Issuer
是同样有效的。
所以,你可以这样写:
public static bool IsSelfSigned(X509Certificate2 cert)
{
return cert.SubjectName.RawData.SequenceEqual(cert.IssuerName.RawData);
}