Проблема использования 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:
SecurityProtocolType
enum для.Net 4.0 (нетTls12
член здесь)SecurityProtocolType
enum для текущего.Net
Если вы хотите использовать TLS 1.2 в существующем коде.NET 4.x без изменений кода приложения, вам потребуется следующее:
Установите.NET Framework 4.6 или выше. Это необходимо для использования TLS 1.2 в качестве протокола по умолчанию в сочетании с соответствующими разделами реестра Windows.
Установите следующие ключи реестра для надежной криптографии.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 для дальнейшего чтения.