asp.net - TLS 1.2 en.NET Framework 4.0
.net-4.0 windows-server-2008-r2 (6)
Tengo un servidor Windows Server 2008 R2 que ejecuta una docena de aplicaciones .NET Framework 4.0 WebForms, y necesito deshabilitar TLS 1.0 y versiones inferiores. Cuando hago eso, todas las conexiones seguras fallan y me vi obligado a volver a habilitar TLS 1.0. ¿Hay alguna forma de usar TLS 1.2 en un entorno de framework 4.0? Tal vez me estoy perdiendo algo?
Además, debido a las limitaciones de la versión de CMS que estamos utilizando, no podemos actualizar el Framework en este momento.
Codifiqué en VB y pude agregar la siguiente línea a mi archivo Global.asax.vb dentro de Application_Start
ServicePointManager.SecurityProtocol = CType(3072, SecurityProtocolType) ''TLS 1.2
De acuerdo con this , necesitará .NET 4.5 instalado. Para más detalles, visite la página web. La esencia de esto es que después de tener instalado .NET 4.5, sus aplicaciones 4.0 usarán 4.5 System.dll. Puede habilitar TLS 1.2 de dos maneras:
-
Al comienzo de la aplicación, agregue este código:
ServicePointManager.SecurityProtocol = (SecurityProtocolType)3072;
-
Establezca la clave de registro
HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/.NETFramework/v4.0.30319: SchUseStrongCrypto
enDWORD 1
La única forma en que he encontrado cambiar esto es directamente en el código:
al comienzo de su aplicación que configuró
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
debes incluir la clase
system.net
Hice esto antes de llamar a un servicio web porque también tuvimos que bloquear tls1.
Me encuentro con el mismo problema en un .NET Framework 4.0 instalado en Windows.
Y resolví este problema instalando
.NET Framework 4.6.2
.
O puede descargar el
paquete más nuevo
para probarlo.
Realice los siguientes cambios en su Registro y debería funcionar:
1.) Claves de registro de criptografía fuertes de .NET Framework
[HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/.NETFramework/v4.0.30319]
"SchUseStrongCrypto"=dword:00000001
[HKEY_LOCAL_MACHINE/SOFTWARE/Wow6432Node/Microsoft/.NETFramework/v4.0.30319]
"SchUseStrongCrypto"=dword:00000001
2.) Claves de registro de Secure Channel (Schannel) TLS 1.2
[HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Control/SecurityProviders/SCHANNEL/Protocols/TLS 1.2]
[HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Control/SecurityProviders/SCHANNEL/Protocols/TLS 1.2/Client]
"DisabledByDefault"=dword:00000000
"Enabled"=dword:00000001
[HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Control/SecurityProviders/SCHANNEL/Protocols/TLS 1.2/Server]
"DisabledByDefault"=dword:00000000
"Enabled"=dword:00000001
Si no puede agregar una propiedad a la biblioteca de clases
system.net
.
Luego, agregue el archivo Global.asax :
ServicePointManager.SecurityProtocol = (SecurityProtocolType)3072; //TLS 1.2
ServicePointManager.SecurityProtocol = (SecurityProtocolType)768; //TLS 1.1
Y puede usarlo en una función, en la línea de inicio:
ServicePointManager.SecurityProtocol = (SecurityProtocolType)768 | (SecurityProtocolType)3072;
Y está siendo útil para la pasarela de pago
STRIPE
, que solo es compatible con TLS 1.1, TLS 1.2.
EDITAR:
después de tantas preguntas sobre .NET 4.5 está instalado en mi servidor o no ... aquí está la captura de pantalla del
Registry
en mi servidor de producción:
Solo tengo instalado .NET Framework 4.0.