Actualice el servicio web .NET para usar TLS 1.2

Resuelto nasch asked hace 7 años • 9 respuestas

Necesito usar TLS 1.2 para conectarme desde mi servicio web .NET a otro que forzará TLS 1.2. Encontré un recurso que decía que .NET 4.6 usa TLS 1.2 de forma predeterminada, por lo que parecía la solución más sencilla. Actualicé el marco .NET en el servidor y lo reinicié. En IIS intenté crear 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 "in situ" de .NET 4.0. Así que pensé que tal vez ya había terminado. Sin embargo, en una página de error que recibí por motivos no relacionados, decía Microsoft .NET Framework Version:4.0.30319que parece que no he actualizado correctamente. ¿Alguna sugerencia sobre cómo asegurarme de que mi grupo de aplicaciones esté usando .NET 4.6 o, de manera más general, cómo habilitar TLS 1.2?

nasch avatar Jul 29 '17 03:07 nasch
Aceptado

De hecho, acabamos de actualizar un servicio web .NET a 4.6 para permitir TLS 1.2.

Lo que Artem dice fueron los primeros pasos que hemos dado. Recompilamos 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 prohibir 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, ejecútame en 4.6, por favor".

Estos son los cambios que agregamos en la compilació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 ejecuta el servicio web en 4.6 (indicado explícitamente) y 4.6 usa TLS 1.2 de forma predeterminada.

Beltaine avatar Aug 01 '2017 16:08 Beltaine

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; 
John Wu avatar Jul 28 '2017 23:07 John Wu