tls12 tls the securityprotocoltype error cannot and c# ssl wsdl

c# - the - securityprotocoltype tls12



SoapHttpClientProtocol y TLS 1.2-El cliente y el servidor no pueden comunicarse, porque no poseen un algoritmo comĂșn (2)

Hay numerosas publicaciones sobre SO sobre esto y las he rastreado, pero todavía no tengo una solución. Espero que alguien pueda señalarme en la dirección correcta.

Ahora tenemos un requisito para usar TLS 1.2 para conectarnos a un proveedor remoto. Así que instalé Windows Server 2016 y lo configuré según lo necesitaba:

Sé que el servidor remoto está ejecutando TLS 1.2 y que es compatible con el cifrado resaltado.

Nos conectamos al punto final remoto utilizando la clase de proxy C # generada por el WSDL proporcionado por el proveedor, antes de convertir su final a TLS (System.Web.Services.Protocols.SoapHttpClientProtocol).

Cuando me conecto usando el proxy obtengo una excepción con la excepción interna de "El cliente y el servidor no pueden comunicarse, porque no poseen un algoritmo común".

No puedo ver en ningún lugar ese ServicePointManager.SecurityProtocol así que supongo que .NET está recogiendo TLS 1.2, ya que es el único protocolo habilitado. No tengo idea de cómo está haciendo el cifrado.

¿Puede alguien decirme cómo hago para intentar arreglar esto? Si es posible, no quiero regenerar la clase de proxy WSDL.


Si su aplicación cliente fue compilada contra .NET Framework 4.5.2 o inferior, entonces por defecto ServicePointManager.SecurityProtocol se inicializa a SecurityProtocolType.Ssl3 | SecurityProtocolType.Tls SecurityProtocolType.Ssl3 | SecurityProtocolType.Tls (solo SSL 3.0 y TLS 1.0), por lo que no podrá conectarse a un servidor remoto que requiera TLS 1.2.

Hay varias formas de permitir que su aplicación cliente use TLS 1.2:

  • Vuelva a compilar su aplicación cliente contra .NET Framework 4.6 o posterior. (En Visual Studio, abra las páginas de propiedades de su proyecto, vaya a la pestaña Aplicación y cambie el Marco de destino).
  • En el equipo cliente, ejecute RegEdit.exe, vaya a HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/ .NETFramework/v4.0.30319 , agregue un valor DWORD (32 bits) denominado SchUseStrongCrypto y SchUseStrongCrypto en 1. (Este indicador provoca ServicePointManager.SecurityProtocol para ser inicializado a Tls | Tls11 | Tls12 .)
  • Cuando se inicia la aplicación cliente, active TLS 1.2: ServicePointManager.SecurityProtocol |= SecurityProtocolType.Tls12;

No es necesario volver a generar su clase de proxy porque no es responsable de negociar el protocolo o el cifrado TLS.


Tuve este problema para eliminar TLS 1.0 de un sitio web que se estaba conectando a un servicio web. Para mí, fue un httpRuntime que estaba atascado en 4.5.1 en web.config del servicio web. El servicio se cambió a 4.6.1, cambiando la versión de httpRuntime en el archivo web.config a 4.6.1 se corrigió el problema. El sitio web intentó configurar TLS para el servicio web y solo tiene 1.2 y 1.1 disponibles. El servicio web solo admitió 1.0, por lo que causó el error.