Saltar al contenido

TLS 1.2 no negociado en .NET 4.7 sin una llamada explícita a ServicePointManager.SecurityProtocol

Solución:

Comenzando con las aplicaciones que tienen como destino .NET Framework 4.7, el valor predeterminado de la ServicePointManager.SecurityProtocol la propiedad es SecurityProtocolType.SystemDefault.

Este cambio permite las API de red de .NET Framework basadas en SslStream (como FTP, HTTPS y SMTP) para heredar los protocolos de seguridad predeterminados del sistema operativo en lugar de utilizar valores codificados definidos por .NET Framework.

Esa es la razón del nuevo comportamiento que experimentó y la necesidad de la nueva configuración:

<runtime>
   <AppContextSwitchOverrides value="Switch.System.ServiceModel.DisableUsingServicePointManagerSecurityProtocols=false;Switch.System.Net.DontEnableSchUseStrongCrypto=false" /> 
</runtime>

Mira aquí y aquí

Actualización (información útil)

Tenga en cuenta que las mejores prácticas de seguridad sugieren actualizar la desactivación de la configuración de IIS, de vez en cuando, los protocolos antiguos y la clave de cifrado (por ejemplo, TLS 1.0, 1.1). Consulte Configuración de Microsoft Windows o IIS para SSL Perfect Forward Secrecy y TLS 1.2 para obtener información muy interesante.

Si sigue esta práctica, no necesita establecer la configuración anterior (como sugiere MS), porque su servidor Win / IIS ya está bien configurado.

Por supuesto, esto solo es posible si tiene acceso al servidor con las concesiones adecuadas.

Tuve el mismo problema (solo Windows 10 y SSL3 / TLS … no predeterminado del sistema) con una aplicación heredada dirigida a 4.7.2. Mi problema fue que durante el proceso de actualización a lo largo de los años, nunca agregamos en el targetFramework al system.web > httpRuntime elemento (Nota: existía en system.web > compilation elemento). Antes de dar pasos más importantes, asegúrese de que su system.web se parezca a lo siguiente:

<system.web>
    <compilation targetFramework="4.7.2"></compilation>
    <httpRuntime targetFramework="4.7.2" />
</system.web>

En el ejemplo anterior, cambie 4.7.2 por cualquier versión del marco que esté utilizando actualmente que sea> = 4.7.

Como alternativa a la respuesta de Nick Y, descubrí que en Windows 7 usando .NET 4.7+, necesitaba habilitar estas configuraciones de registro para que el paquete Microsoft Secure Channel (Schannel) envíe correctamente TLS1.1 y TLS1.2.

Esto permite que el cliente .NET continúe teniendo System.Net.ServicePointManager.SecurityProtocol ajustado a SystemDefault y obtenga TLS 1.1 y 1.2 en una computadora con Windows 7.

Utilizando el SystemDefault La opción permite que .NET difiera la selección de protocolos al sistema operativo. Esto significa que cuando Microsoft lanza revisiones para el sistema operativo para deshabilitar protocolos inseguros o habilita el soporte para nuevos en su biblioteca SCHANNEL nativa, las aplicaciones de .NET Framework que se ejecutan automáticamente obtendrán este nuevo comportamiento.

Aquí están las entradas del registro:

[HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlSecurityProvidersSCHANNELProtocolsTLS 1.1Client]
"DisabledByDefault"=dword:00000000

[HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlSecurityProvidersSCHANNELProtocolsTLS 1.2Client]
"DisabledByDefault"=dword:00000000
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *