Вопрос:
Я пытаюсь проверить, что сертификат не был отозван с использованием X509Chain в С#.
X509Chain chain = new X509Chain(); chain.ChainPolicy.RevocationMode = X509RevocationMode.Online; chain.ChainPolicy.RevocationFlag = X509RevocationFlag.EndCertificateOnly; chain.Build(certificate);
Возвращает статус:
Функция аннулирования не смогла проверить отзыв для сертификата
Я хочу проверить отмененные сертификаты, а не просто отключить эту ошибку.
Как решить эту проблему или по крайней мере лучше понять причину (например, как узнать, где она проверяет CRL?)
Лучший ответ:
Проверка отзыва включает проверку статуса сертификата в CRL и использование OCSP для онлайн-проверки состояния. Документация предполагает, что .NET проверяет только CRL, но “Интернет”, вероятно, означает, что CRL должен быть загружен. В этом случае ваша ошибка может означать, что местоположение CRL не может быть найдено (нет в сертификате), или оно не может быть достигнуто.
Первый шаг: проверить, содержит ли сертификат место CRL. Вы можете увидеть это в свойствах сертификата – там есть расширение точки распространения CRL.
Если присутствует CRL и указывает URL-адрес HTTP/HTTPS, вы можете проверить этот URL-адрес, чтобы узнать, доступен ли он.
К сожалению, хотя эти шаги могут быть автоматизированы, они не охватывают какой-либо источник проблемы – CRL может быть искажен или сервер может вернуть не CRL (но, например, ответ об ошибке) или подпись в CRL недействительно. Таким образом, приведенные выше шаги дадут вам только основную информацию о проблеме.
Я не знаю, сможет ли .NET произвести более содержательное описание отказа. В наших компонентах (SecureBlackbox) мы предоставляем более подробную информацию о сбоях, и этот вопрос часто встречается в технической поддержке, несмотря на наличие обширной статьи часто задаваемых вопросов по этой теме.