c# .net tls1.2

c# - Actualice el servicio web.NET para usar TLS 1.2



tls1.2 (5)

Agregue el siguiente código antes de crear una instancia de su cliente de servicio web:

System.Net.ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;

O para compatibilidad con versiones anteriores de TLS 1.1 y anteriores:

System.Net.ServicePointManager.SecurityProtocol |= SecurityProtocolType.Tls12;

Necesito usar TLS 1.2 para conectarme desde mi servicio web .NET a otro que obligue a TLS 1.2. Encontré un recurso que decía que .NET 4.6 usa TLS 1.2 de forma predeterminada, por lo que sonaba como la solución más fácil. Actualicé .NET Framework en el servidor y reinicié. En IIS intenté hacer un grupo de aplicaciones usando .NET 4.6 pero 4.0 era la única opción. Luego encontré algo que decía que todavía diría 4.0 porque 4.6 es una actualización "en el lugar" de .NET 4.0. Entonces pensé que tal vez había terminado. Sin embargo, en una página de error que recibí por razones no relacionadas, decía Microsoft .NET Framework Version:4.0.30319 por lo que parece que no me he actualizado con éxito. ¿Algún indicador sobre cómo asegurarse de que mi grupo de aplicaciones esté usando .NET 4.6, o más generalmente, cómo habilitar TLS 1.2?


En realidad, acabamos de actualizar un servicio web .NET a 4.6 para permitir TLS 1.2.

Lo que dice Artem fueron los primeros pasos que hemos hecho. Recopilamos el marco del servicio web a 4.6 e intentamos cambiar la clave de registro para habilitar TLS 1.2, aunque esto no funcionó: la conexión todavía estaba en TLS 1.0. Además, no queríamos rechazar SLL 3.0, TLS 1.0 o TLS 1.1 en la máquina: otros servicios web podrían estar usando esto; Revertimos nuestros cambios en el registro.

De hecho, cambiamos los archivos Web.Config para decirle a IIS: "oye, ejecutame en 4.6 por favor".

Aquí están los cambios que agregamos en la recompilación web.config + en .NET 4.6:

<system.web> <compilation targetFramework="4.6"/> <!-- Changed framework 4.0 to 4.6 --> <!--Added this httpRuntime --> <httpRuntime targetFramework="4.6" /> <authentication mode="Windows"/> <pages controlRenderingCompatibilityVersion="4.0"/> </system.web>

Y la conexión cambió a TLS 1.2, porque IIS ahora está ejecutando el servicio web en 4.6 (indicado explícitamente) y 4.6 está usando TLS 1.2 por defecto.


Para mí a continuación funcionó:

Paso 1: descargué e instalé el web Installer exe desde https://www.microsoft.com/en-us/download/details.aspx?id=48137 en el servidor de aplicaciones. Reinició el servidor de aplicaciones después de completar la instalación.

Paso 2: se agregaron los siguientes cambios en web.config

<system.web> <compilation targetFramework="4.6"/> <!-- Changed framework 4.0 to 4.6 --> <!--Added this httpRuntime --> <httpRuntime targetFramework="4.6" /> </system.web>

Paso 3: Después de completar los pasos 1 y 2, se produjo un error, " WebForms UnobtrusiveValidationMode requiere un ScriptResourceMapping para ''jquery''. Agregue un ScriptResourceMapping llamado jquery (distingue entre mayúsculas y minúsculas) " y para resolver este error, agregué la siguiente clave en la configuración en mi archivo web.config

<appSettings> <add key="ValidationSettings:UnobtrusiveValidationMode" value="None" /> </appSettings>


Se necesitan tres pasos:

  1. Marque explícitamente SSL2.0, TLS1.0, TLS1.1 como prohibido en su máquina servidor, agregando Enabled=0 y DisabledByDefault=1 a su registro (la ruta completa es HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Control/SecurityProviders/SCHANNEL/Protocols ) Ver pantalla para más detalles

  2. Habilite explícitamente TLS1.2 siguiendo los pasos de 1. Solo use Enabled=1 y DisabledByDefault=0 respectivamente.

NOTA: verifique la versión del servidor: Windows Server 2003 no es compatible con el protocolo TLS 1.2

  1. Habilite TLS1.2 solo en el nivel de la aplicación, como @John Wu sugirió anteriormente.

    System.Net.ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;

Espero que esta guía te ayude.

ACTUALIZACIÓN Como @Subbu mencionó: Guía oficial


si está utilizando .Net antes de 4.5, no tendrá Tls12 en la enumeración, por lo que el estado se menciona explícitamente here

ServicePointManager.SecurityProtocol = (SecurityProtocolType)3072;