Проблема использования TLS 1.2 в.NET Framework 4.0

У меня отключен TLS 1.0. Поэтому мы пытаемся использовать TLS 1.2 в нашем приложении.Net, которое использует.Net Framework 4.0.

Я добавил код для этого в начале

System.Net.ServicePointManager.SecurityProtocol = (SecurityProtocolType)3072;

Он отлично работает в моей локальной системе.

Но я не уверен, почему он не работает при развертывании кода на сервере (Windows Server 2008 R2). Я все проверил. .Net Framework присутствует на сервере. Но все же это дает ту же проблему только на сервере.

Есть что-то, что я здесь скучаю?

2 ответа

Решение

Согласно этому посту:

.NET 4.0 поддерживает до TLS 1.0 в то время как .NET 4.5 поддерживает до TLS 1.2

Однако нацеливание приложения .NET 4.0 все еще может поддерживать до TLS 1.2, если.NET 4.5 установлен в той же среде. .NET 4.5 устанавливается поверх .NET 4.0, заменяя System.dll,

Так что в основном вам нужно обновить свой сервер до .Net 4.5 включить TLS 1.2,

Кроме того, вы можете упростить ваш код и сделать его более читабельным:

using System.Net;

ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;

Статьи по теме MSDN:

Если вы хотите использовать TLS 1.2 в существующем коде.NET 4.x без изменений кода приложения, вам потребуется следующее:

  1. Установите.NET Framework 4.6 или выше. Это необходимо для использования TLS 1.2 в качестве протокола по умолчанию в сочетании с соответствующими разделами реестра Windows.

  2. Установите следующие ключи реестра для надежной криптографии.NET Framework:

В 32-разрядных и 64-разрядных версиях Windows: [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\v4.0.30319] "SchUseStrongCrypto"=dword:00000001

В 64-разрядных версиях Windows: [HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\.NETFramework\v4.0.30319] "SchUseStrongCrypto"=dword:00000001

Значение WOW6432Node используется 32-разрядными приложениями при работе в 64-разрядной системе.

Для получения дополнительной информации см.: https://github.com/TheLevelUp/pos-tls-patcher

Обновление: действительно не очень хорошая идея жестко кодировать протокол безопасности в коде приложения. Вы хотите, чтобы ОС делала это для вас. См. Рекомендации по обеспечению безопасности транспортного уровня (TLS) с.NET Framework для дальнейшего чтения.

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