Нам посчастливилось запустить службу REST API, которая предоставляет конечную точку https://
. Недавно мы изменили наш SSL-сертификат, и несколько пользователей, в основном пользователи libcurl и Java, жаловались, что они больше не могут проверять сертификат, а их программы отказываются подключаться к нашему сервису. Другие пользователи, в том числе пользователи .NET, проблем не наблюдали. Firefox также с удовольствием открывает страницы на сайте с этим сертификатом.
Нам нужно создать некоторый код, который проверяет сертификаты самым сложным способом, прежде чем мы будем использовать их в производстве.
Я создал фрагмент кода, который создает объект 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()
для того, чтобы все наши пользователи могли успешно проверить сертификат? Нужны ли другие проверки?