[Wcf] Cómo resolver "No se pudo establecer una relación de confianza para el canal seguro SSL / TLS con autoridad"


Answers

Cuando tengo este problema es porque client.config tenía sus extremos como:

 https://myserver/myservice.svc 

pero el certificado estaba esperando

 https://myserver.mydomain.com/myservice.svc

Cambiar los puntos finales para que coincida con el FQDN del servidor resuelve mi problema. Sé que esta no es la única causa de este problema.

Question

Realmente pensé que tenía este problema solucionado, pero solo estaba disfrazado antes.

Tengo un servicio WCF alojado en IIS 7 usando HTTPS. Cuando navego a este sitio en Internet Explorer, funciona como un encanto, esto se debe a que he agregado el certificado al almacén de la autoridad del certificado raíz local.

Estoy desarrollando en 1 máquina, por lo que el cliente y el servidor son la misma máquina. El certificado se firma automáticamente desde el complemento de administración de IIS 7.

Continuamente obtengo este error ahora ...

No se pudo establecer una relación de confianza para el canal seguro SSL / TLS con autoridad.

... cuando se llama desde la consola del cliente.

Me di manualmente permisos y servicio de red para el certificado, usando findprivatekey y usando cacls.exe .

Traté de conectarme al servicio utilizando SOAPUI, y eso funciona, por lo que debe ser un problema en mi aplicación cliente, que es un código basado en lo que solía funcionar con http.

¿Dónde más puedo mirar parece haber agotado todas las posibilidades de por qué no puedo conectarme?




Una solución de una línea. Agregue esto a cualquier lugar antes de llamar al servidor en el lado del cliente:

System.Net.ServicePointManager.ServerCertificateValidationCallback += delegate { return true; };

Esto solo se debe utilizar con fines de prueba porque el cliente omitirá las comprobaciones de seguridad de SSL / TLS.




Yo tuve el mismo problema. También había agregado certificados de CA en la tienda local, pero lo hice de la manera INCORRECTA.

Con la consola mmc (Inicio -> Ejecutar -> mmc ) debe agregar el complemento Certificados como cuenta de servicio (eligiendo la cuenta de servicio de IIS) o cuenta de equipo (se agrega para cada cuenta en la máquina)

Aquí una imagen de lo que estoy hablando

A partir de ahora, puede agregar certificados de CA ( CA de raíz de confianza y CA intermedias ), y todo funcionará bien




Su problema surge porque está usando una clave autofirmada. El cliente no confía en esta clave, ni la propia clave proporciona una cadena para validar o una lista de revocación de certificados.

Tienes algunas opciones: puedes

  1. desactivar la validación del certificado en el cliente (mala jugada, abundan los ataques del hombre en el medio)

  2. use makecert para crear una CA raíz y cree certificados a partir de eso (muévala bien, pero todavía no hay CRL)

  3. cree una CA raíz interna utilizando Windows Certificate Server u otra solución PKI y luego confíe en ese certificado raíz (un poco difícil de manejar)

  4. compre un certificado SSL de una de las CA confiables (costoso)




Acabo de arrastrar el certificado a la carpeta "Autoridades de certificación de raíz de confianza" y todo funcionó de maravilla.

Oh. Y primero agregué lo siguiente de un Símbolo del sistema de administrador:

netsh http add urlacl url=https://+:8732/Servicename user=NT-MYNDIGHET\INTERAKTIV

No estoy seguro del nombre que necesita para el usuario (¡el mío es noruego, como puede ver!): user=NT-AUTHORITY/INTERACTIVE ?

Puede ver todos los urlacl existentes emitiendo el comando: netsh http show urlacl




Además de las respuestas anteriores, puede encontrar este error si su cliente ejecuta una versión TLS incorrecta, por ejemplo, si el servidor solo está ejecutando TLS 1.2.

Puedes arreglarlo usando:

            ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12; //tested in .NET 4.5



Solo solucioné un problema similar.

Me di cuenta de que tenía un grupo de aplicaciones que se estaba ejecutando bajo una cuenta que solo tenía permiso de lectura sobre el certificado que se utilizó.

La aplicación .NET podría recuperar correctamente el certificado, pero esa excepción se lanzó solo cuando se llamó a GetRequestStream ().

Los permisos de certificados se pueden administrar a través de la consola de MMC