Сертификат SSL с Incomplete-Chain, проходит проверку в. NET Core 2.2 - PullRequest
0 голосов
/ 06 марта 2020

Использование. NET Core 2.2, мне нужно воссоздать ошибку SSL с неполной цепочкой, однако ServerCertificateValidationCallback дает мне другую цепочку сертификатов, чем я ожидаю, с этими сертификатами, проходящими проверку. Может кто-нибудь объяснить, что здесь происходит не так?

Автономный тест, который вызывает badssl.com:

    public void DoTheThing()
    {
        string URI = "https://incomplete-chain.badssl.com";

        ServicePointManager.ServerCertificateValidationCallback +=
            new RemoteCertificateValidationCallback(Validate.ValidateRemoteCertificate);

        using (WebClient wc = new WebClient())
        {
            var output = wc.DownloadString(URI);
        }
    }

    public static bool ValidateRemoteCertificate(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors policyErrors)
    {
        return policyErrors == SslPolicyErrors.None;
    }

Параметр X509Chain в моем обратном вызове содержит 3 сертификата, *. Badssl. com , Digicert и Digicert . Сертификат 2 является Digicert и действителен.

Visual Studio reports a different 2nd certificate

Однако SslLabs , он говорит мне, что должно быть только два сертификата, со вторым срок действия одного истек:

SslLabs overview of the incomplete-chain.badssl.com 2nd certificate

1 Ответ

0 голосов
/ 07 марта 2020

. NET X509Chain класс имеет лог c, чтобы найти недостающие сертификаты из состояния внешней системы, которое здесь отображается. Единственный раз, когда вы увидите неполную цепочку из TLS, это когда сервер отправил неполную цепочку, и система не может заполнить недостающие фрагменты.

SslLabs сообщает о том, что произошло конкретно в соединении TLS. NET X509Chain рассмотрел 2-й сертификат, решил, что в цепочке это не имеет смысла, и выбросил его, так что вы не увидите его. Нет способа увидеть необработанные данные сертификата из сообщений TLS через SslStream.

...