У меня есть корневой сертификат и лист. Лист имеет расширение OID URL CRL, которое указывает на действительное онлайн-местоположение. Делая это:
certutil -verify .\leaf.cer
терпит неудачу с
ОШИБКА: возвращено состояние проверки отзыва листового сертификата. Функция отзыва не смогла проверить отзыв, поскольку сервер отзыва был отключен. 0x80092013 (-2146885613 CRYPT_E_REVOCATION_OFFLINE)
Если я сделаю это:
certutil -verify .\leaf.cer .\root.cer
Затем проверка проходит, и я вижу, что CRL извлекается из сети в Fiddler.
В моем коде С# я делаю это:
X509Chain childCertChain = new X509Chain();
childCertChain.ChainPolicy.ExtraStore.Add(rootCert);
childCertChain.ChainPolicy.RevocationMode = X509RevocationMode.Online;
childCertChain.ChainPolicy.UrlRetrievalTimeout = TimeSpan.FromSeconds(10);
if (!childCertChain.Build(childCert))
{
// The root cert is not in the windows certificate store, that is fine
if (childCertChain.ChainStatus.Length != 1 || childCertChain.ChainStatus.First().Status != X509ChainStatusFlags.UntrustedRoot)
{
throw new Exception("Certificate validation error.");
}
}
Это приведет к моему исключению, и хотя chainElements будут правильно заполнены двумя сертификатами, ChainStatus покажет:
OfflineRevocation, RevocationStatusUnknown
Я также не увижу никаких веб-запросов в Fiddler. Я могу программно загрузить CRL по URL-адресу, так что это не моя среда отладки, насколько мне известно. Есть идеи, как добиться успеха x509Chain.Build?
chain.ChainElements
? - person Crypt32   schedule 08.04.2020certutil -verify -urlfetch cert.cer
. Проверьте, все ли URL-адреса в порядке, или, что еще лучше, опубликуйте вывод certutil. - person Crypt32   schedule 08.04.2020-urlfetch
? - person Crypt32   schedule 08.04.2020