我必须写一个工具,用于验证X509证书是否有效(输入为证书路径/主题和密码)。我该如何做呢?我对证书不是很了解...
我必须写一个工具,用于验证X509证书是否有效(输入为证书路径/主题和密码)。我该如何做呢?我对证书不是很了解...
一般来说,RFC 3280 包含了几乎完整的指令,关于如何执行验证,但这些指令非常复杂。此外,您需要阅读 RFC 2560(OCSP)并实现 OCSP 客户端。
对于大多数任务,您会发现我们的 TElX509CertificateValidator 组件 非常适合。它检查证书路径、CRL 和 OCSP 撤销(以及检查 CRL 和 OCSP 响应的有效性)。它足够灵活和强大,并允许您在每个步骤上执行额外的深入检查。此外,此组件可以与 Windows 证书存储和任何其他证书、证书链和存储一起使用,这些证书、证书链和存储可能存在于文件或内存中。
X509Certificate2.Verify
方法使用基本验证策略执行 X.509 链验证。
此方法为证书构建简单链,并对该链应用基本策略。如果您需要有关失败的更多信息,请使用
X509Chain
对象直接验证证书。
X509Certificate2 cert = GetX509Cert();
// Verify the certificate
bool isValid = cert.Verify();
public static bool ValidateCertificate(X509Certificate2 certificate)
{
// Check the certificate has not expired
if (certificate.NotAfter < DateTime.UtcNow)
{
return false;
}
// Performs a X.509 chain validation using basic validation policy
if (!certificate.Verify())
{
return false;
}
// Check that the certificate's subject contains a specific string
if (!certificate.Subject.Contains("CN=example.com"))
{
return false;
}
// Check that the certificate's issuer contains a specific string
if (!certificate.Issuer.Contains("CN=Root CA"))
{
return false;
}
// All checks passed, certificate is valid
return true;
}
您需要初始化 X509Certificate2
类的新实例来验证它。有许多构造函数可通过以下方式之一创建新实例:
var cert = new X509Certificate2(@"C:\yourcertfile.crt");
// or
var cert = new X509Certificate2(@"C:\yourcertfile.crt", password);
// or
var cert = new X509Certificate2(@"C:\yourcertfile.crt");
// or
var cert = X509Certificate2.CreateFromPemFile(@"C:\yourcertfile.pem");
// or
var cert = X509Certificate2.CreateFromPem(File.ReadAllText(@"C:\yourcertfile.pem"));
您还可以通过 X509Store
和 按主题名称查找证书 打开当前用户或当前计算机的证书存储。
X509Store store = new X509Store("MY",StoreLocation.CurrentUser);
store.Open(OpenFlags.ReadOnly | OpenFlags.OpenExistingOnly);
X509Certificate2Collection certs = store.Certificates.Find(X509FindType.FindBySubjectName, "Your Cert's Subject Name", false);
var cert = certs.Count > 0 ? certs[0] : null;