Для будущих читателей.
Как уже было сказано, .NET в настоящее время не предоставляет открытые классы ни для списков отзыва сертификатов X.509, ни для обмена сообщениями OCSP.Конечно, вы можете написать свой собственный код или использовать сторонние библиотеки.
Вы можете попробовать мои собственные управляемые расширения CryptoAPI из PowerShell PKI проекта модуля (библиотека PKI.Core.dll).Существует поддержка управляемого класса C509 CRL (построенного на основе собственных функций CryptoAPI): X509CRL2 class .Свойство RevokedCertificates хранит массив отозванных сертификатов.Кроме того, библиотека включает в себя классы обмена сообщениями OCSP (полностью управляемые), хранящиеся в пространстве имен PKI.OCSP.Если ваш сертификат содержит ссылки OCSP в расширении AIA, вы можете легко создать запрос OCSP из объекта X509Certificate2, создав экземпляр объекта OCSPRequest и вызвав метод OCSPRequest.SendRequest .Возвращаемый объект является экземпляром класса OCSPResponse .
По сути, код выглядит так:
using System;
using System.Security.Cryptography.X509Certificates;
using PKI.OCSP;
public class Class1 {
public static DateTime? GetrevocationDate(X509Certificate2 cert) {
OCSPRequest request = new OCSPRequest(cert);
OCSPResponse response = request.SendRequest();
if (response.Responses[0].CertStatus == CertificateStatus.Revoked) {
return response.Responses[0].RevocationInfo.RevocationDate;
}
return null;
}
}
NULL будет означать, что сертификат не аннулирован.
с X509 CRL код будет выглядеть так:
using System;
using System.Security.Cryptography.X509Certificates;
public class Class1 {
// crlRawData could a type of System.String and pass the path to a CRL file there.
public static DateTime? GetrevocationDate(X509Certificate2 cert, Byte[] crlRawData) {
X509CRL2 crl = new X509CRL2(crlRawData);
X509CRLEntry entry = crl.RevokedCertificates[cert.SerialNumber];
if (entry != null) {
return entry.RevocationDate;
}
return null;
}
}