Мы запускаем службу REST API, которая предоставляет конечную точку https://
. Недавно мы изменили наш SSL-сертификат, и несколько пользователей, в основном пользователи libcurl и Java, жаловались, что они больше не могут проверять сертификат, а их программы отказываются подключиться к нашей службе. Другие пользователи, включая пользователей .NET, не обнаружили никаких проблем. Firefox также рад открывать страницы на сайте с этим сертификатом.Как выполнить самую сложную проверку сертификата SSL с кодом .NET?
Нам необходимо создать код, который проверяет сертификаты самым трудным способом, прежде чем мы будем использовать их в производстве.
Я обработал кусок кода, который создает X509Certificate2
объект для сертификата, а затем пытается X509Chain.Build()
от него:
var certDataArray = File.ReadAllBytes(path);
var cert = new X509Certificate2(certDataArray, password);
var chain = new X509Chain();
var result = chain.Build(cert);
var status = chain.ChainStatus;
Этот код работает хорошо для нашего предыдущего сертификата (который еще не истек) и терпит неудачу (Build()
false
и X509Chain.ChainStatus
содержит ряд элементов - X509ChainStatusFlags.RevocationStatusUnknown
, X509ChainStatusFlags.PartialChain
, X509ChainStatusFlags.OfflineRevocation
). Таким образом, похоже, что для этого конкретного сертификата эта проверка достаточно.
Достаточно ли X509Chain.Build()
, чтобы все наши пользователи могли успешно проверить сертификат? Требуются ли какие-либо другие проверки?
Что вы изменили в своем сертификате? Вы использовали новый CA/эмитент? –
@ stephen.vakil Новый сертификат поступает из другого ЦС и что-то не так с этой инфраструктурой ЦС, что предотвращает тщательную проверку. Это действительно имеет значение? – sharptooth