Проверка версии протокола TLS веб — сайта, отличной от версии Google Chrome

#c# #google-chrome #ssl

Вопрос:

Я пишу программу на C#

 public static void RunClient(string machineName, string serverName)
{
    using (var client = new TcpClient(machineName, 443))
    {
        Console.WriteLine("Client connected.");

        using (var sslStream = new SslStream(
            client.GetStream(),
            false,
            new RemoteCertificateValidationCallback(ValidateServerCertificate),
            null
            ))
        {
            try
            {
                sslStream.AuthenticateAsClient(serverName);
            }
            catch (AuthenticationException e)
            {
                Console.WriteLine("Exception: {0}", e.Message);
                if (e.InnerException != null)
                {
                    Console.WriteLine("Inner exception: {0}", e.InnerException.Message);
                }
                Console.WriteLine("Authentication failed - closing the connection.");
                client.Close();
                return;
            }

            var request = String.Format("GET https://{0}/  HTTP/1.1rnHost: {0}rnrn", serverName);
            byte[] messsage = Encoding.UTF8.GetBytes(request);

            sslStream.Write(messsage, 0, messsage.Length);
            sslStream.Flush();

            Console.WriteLine($"Protocol: { sslStream.SslProtocol }");

            client.Close();
            Console.WriteLine("Client closed.");
        }
    }
}
 

Результатом программы является

Клиент подключен.

Протокол: Tls12

Клиент закрыт.

Но когда я проверяю тот же веб-сайт в Google Chrome, он показывает, что протокол TLS 1.3

Примечание 2021-07-27: Только что обнаружил, что .net Framework 4.6, который я использую, не поддерживает TLS 1.3, поэтому я обновил его до .net framework 4.8, но результат все тот же.

Мой вопрос в том, почему результат отличается? и какой результат является правильным?

Комментарии:

1. Вероятно, используемый вами стек TLS не поддерживает протокол TLS 1.3 или он не включен в вашей программе. Обратите внимание, что C# не использует тот же стек TLS, что и Chrome.

2. @SteffenUllrich, значит, Google Chrome работает правильно?

3. И то и другое верно. Очевидно, что сайт поддерживает, по крайней мере, TLS 1.2 и TLS 1.3. Он может даже поддерживать больше, обратитесь к SSLLabs .