.NET 4.8 TLS 1.3 Проблема в Windows 10

Приложение .NET 4.8, работающее в Windows 10 (версия 10.0.19041) с включенным TLS 1.3, с использованием реестра согласно как включить TLS 1.3 в Windows 10

Однако выполняется следующий код:

 try
            {                
                System.Net.ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls13;
                using (var client = new WebClient())
                { 
                    var img = client.DownloadData("URL of an image - Only TLS 1.3 at client side - removed for privacy purposes");
                    MemoryStream ms = new MemoryStream(img);
                    Image i = Image.FromStream(ms);
                    i.Save(AppDomain.CurrentDomain.BaseDirectory+"/img1.jpeg");
                }
            }
            catch(Exception ex)
            {
                logger.Log(LogLevel.Error, ex.ToString());
            }

Выдает следующее - Exception StackTrace:

2020-10-05 12:40:52.4779 ERROR System.Net.WebException: The underlying connection was closed: An unexpected error occurred on a receive. ---> System.IO.IOException: Cannot determine the frame size or a corrupted frame was received.
   at System.Net.Security._SslStream.StartFrameBody(Int32 readBytes, Byte[] buffer, Int32 offset, Int32 count, AsyncProtocolRequest asyncRequest)
   at System.Net.Security._SslStream.StartFrameHeader(Byte[] buffer, Int32 offset, Int32 count, AsyncProtocolRequest asyncRequest)
   at System.Net.Security._SslStream.StartReading(Byte[] buffer, Int32 offset, Int32 count, AsyncProtocolRequest asyncRequest)
   at System.Net.Security._SslStream.ProcessRead(Byte[] buffer, Int32 offset, Int32 count, AsyncProtocolRequest asyncRequest)
   at System.Net.Security._SslStream.Read(Byte[] buffer, Int32 offset, Int32 count)
   at System.Net.TlsStream.Read(Byte[] buffer, Int32 offset, Int32 size)
   at System.Net.PooledStream.Read(Byte[] buffer, Int32 offset, Int32 size)
   at System.Net.Connection.SyncRead(HttpWebRequest request, Boolean userRetrievedStream, Boolean probeRead)

Я обнаружил связанную проблему с .NET 5.0, однако я не вижу, будет ли она исправлена ​​или будет исправлена ​​для .NET 4.8 https://github.com/dotnet/runtime/issues/1720


person Rick Sanchez    schedule 05.10.2020    source источник


Ответы (1)


Прямо из рекомендаций Transport Layer Security (TLS) с проблемой документа .NET Framework, датируемые 21.08.2020:

.NET Framework пока не поддерживает TLS 1.3. Над этим мы скоро начнем работать (cc @wfurt). Суть в том, что для использования TLS 1.3 мы должны использовать новый Windows API, поэтому мы должны изменить наш код в .NET Framework, и это изменение довольно велико из-за других требований TLS 1.3 (вещи, которые не имеют значения в TLS 1.2 и ниже).

Также обратите внимание, что Windows 10 с TLS 1.3 (неэкспериментальная поддержка) была выпущена совсем недавно, я думаю, что только в сборках Windows 10 Insider (подробности есть у @wfurt).

В .NET Core мы реализовали поддержку TLS 1.3 совсем недавно в предстоящей сборке RC1 .NET 5. Вы можете попробовать ее там (конечно же, в сборке ОС, которая ее поддерживает).

Выпущен .NET 5 RC1 с готовой к эксплуатации лицензией.

person kapsiR    schedule 05.10.2020