.NET Framework 3.5 и TLS 1.2
В настоящее время у меня есть веб-приложение, которое использует платформу.NET 3.5, и мне интересно, будет ли оно совместимо с TLS 1.2. Нет, где в нашем коде мы диктуем версию TLS. Это устаревшее приложение, и его перекомпиляция сейчас не обсуждается. Я не нахожу много информации о том, можете ли вы или не можете, но у меня сложилось впечатление, что совместимость больше зависит от версии ОС. Похоже, минимум 2008 R2. Цель состоит в том, чтобы заставить PayPal правильно общаться с 1 июля.
5 ответов
Как видно из документации, TLS 1.2 не входит в перечисление SslProtocols
, он был добавлен в перечисление в.NET 4.5 (спасибо @orhun).
В.NET 3.5 нет обходного пути для совместимости с TLS 1.2.
К сожалению, вам придется обновить до.NET 4.5 или более поздней версии, чтобы получить совместимость с TLS 1.2.
РЕДАКТИРОВАТЬ 10/11/17
Мой ответ выше не является точным. В мае 2017 года Microsoft выпустила пакет, поддерживающий TLS 1.2 в.NET 3.5.1.
Как уже упоминалось,.net 3.5.1 теперь поддерживает TLS 1.2; но вам не нужны изменения реестра, упомянутые в ответе @Paulina.
Я использую VS 2008 с.net 3.5.30729.4926. Все, что мне нужно было сделать, это:
Добавить импорт:
Imports System.Security.Authentication
Imports System.Net
Добавьте это в мой код (C#):
public const SslProtocols _Tls12 = (SslProtocols)0x00000C00;
public const SecurityProtocolType Tls12 = (SecurityProtocolType)_Tls12;
ServicePointManager.SecurityProtocol = Tls12
Версия VB.net:
Const _Tls12 As SslProtocols = DirectCast(&HC00, SslProtocols)
Const Tls12 As SecurityProtocolType = DirectCast(_Tls12, SecurityProtocolType)
ServicePointManager.SecurityProtocol = Tls12
Отобран из: https://support.microsoft.com/en-us/help/3154518/support-for-tls-system-default-versions-included-in-the-.net-framework Примечание: путем определения const в мой код я мог игнорировать все остальное в статье, включая изменения в реестре и файлы CS.
Вы можете заставить TLS 1.2 работать с Framework 3.5.
Microsoft выпустила обновление для него.
Следуйте этим шагам
- Установите Обновление поддержки для TLS в Framework 3.5 отсюда:
- Перейти в реестр
- Введите regedit в начале
- Щелкните правой кнопкой мыши и запустите от имени администратора
- Перейдите к ключам реестра
[HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \.NETFramework \ v2.0.50727]
[HKEY_LOCAL_MACHINE \ SOFTWARE \ Wow6432Node \ Microsoft \.NETFramework \ v2.0.50727]
- Щелкните правой кнопкой мыши по ключу реестра и выберите "Экспорт".
Назовите файл и сохраните его с расширением.reg (сохраните его в качестве резервной копии на случай, если вам понадобится восстановить их)
- Добавить запись в разделы реестра
- Сделайте копию сохраненных файлов и переименуйте их
- Откройте текстовый редактор и добавьте следующий текст к каждой клавише (это для 64-битной операционной системы) и сохраните изменения (для 32-битной операционной системы посмотрите информацию в ссылке)
[HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \.NETFramework \ v2.0.50727] "SystemDefaultTlsVersions" = dword: 00000001
[HKEY_LOCAL_MACHINE \ SOFTWARE \ Wow6432Node \ Microsoft \.NETFramework \ v2.0.50727] "SystemDefaultTlsVersions" = dword: 00000001
Дважды щелкните файл и нажмите Да в окне, чтобы разрешить изменения
- Добавьте код в ваш проект, как указано в ссылке - раздел "Руководство разработчика"
Я применил это решение, и оно сработало для меня.
Я только что убедился, что это все, что вам нужно в вашем коде, чтобы включить поддержку TLS 1.2 в .NET Framework 3.5:
ServicePointManager.SecurityProtocol = (SecurityProtocolType)3072;
Я проверил, создав модульный тест в .NET Framework 3.5, который извлекает эту HTML-страницу: https://clienttest.ssllabs.com:8443/ssltest/viewMyClient.html
Без этой строки на тестовой странице TLS указано, что я использую TLS 1.0, который установлен в .NET 3.5 по умолчанию.
TLS 1.1 устарел вместе с 1.0, но если вы хотите включить его, вы можете использовать эту строку (не рекомендуется):
ServicePointManager.SecurityProtocol = (SecurityProtocolType)3072 | (SecurityProtocolType)768;
У меня та же проблема, что и у OP - старый код.net 3.5, требующий подключения к внешней службе с использованием tls 1.2.
Как уже упоминалось в принятом ответе, есть патч для tls1.2, выпущенный MS.
После этого они выпустили патч для Server 2008 (не R2): https://cloudblogs.microsoft.com/microsoftsecure/2017/07/20/tls-1-2-support-added-to-windows-server-2008/
Так что должно быть возможно обновить до tls 1.2, пока еще работает сервер 2008.