.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 выпустила обновление для него.

Следуйте этим шагам

  1. Установите Обновление поддержки для TLS в Framework 3.5 отсюда:

https://support.microsoft.com/en-us/help/3154518/support-for-tls-system-default-versions-included-in-the-.net-framework-3.5.1-on-windows-7-sp1-and-server-2008-r2-sp1

  1. Перейти в реестр
    • Введите regedit в начале
    • Щелкните правой кнопкой мыши и запустите от имени администратора
    • Перейдите к ключам реестра

[HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \.NETFramework \ v2.0.50727]

[HKEY_LOCAL_MACHINE \ SOFTWARE \ Wow6432Node \ Microsoft \.NETFramework \ v2.0.50727]

  • Щелкните правой кнопкой мыши по ключу реестра и выберите "Экспорт".
  • Назовите файл и сохраните его с расширением.reg (сохраните его в качестве резервной копии на случай, если вам понадобится восстановить их)

    1. Добавить запись в разделы реестра
  • Сделайте копию сохраненных файлов и переименуйте их
  • Откройте текстовый редактор и добавьте следующий текст к каждой клавише (это для 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

  • Дважды щелкните файл и нажмите Да в окне, чтобы разрешить изменения

    1. Добавьте код в ваш проект, как указано в ссылке - раздел "Руководство разработчика"

Я применил это решение, и оно сработало для меня.

Я только что убедился, что это все, что вам нужно в вашем коде, чтобы включить поддержку 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.

Другие вопросы по тегам