#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 .