Realmente pensé que tenía este problema solucionado, pero solo estaba disfrazado antes.
Tengo un servicio WCF alojado en IIS 7 usando HTTPS. Cuando busco este sitio en Internet Explorer, funciona de maravilla, esto se debe a que he agregado el certificado al almacén local de la autoridad de certificación raíz.
Estoy desarrollando en 1 máquina, por lo que el cliente y el servidor son la misma máquina. El certificado está autofirmado directamente desde el complemento de administración de IIS 7.
Continuamente recibo 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 otorgé manualmente permisos y servicios de red para el certificado, usando findprivatekey
y usando cacls.exe
.
Intenté conectarme al servicio usando 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 que he agotado todas las posibilidades de por qué no puedo conectarme.
fuente
Respuestas:
Como solución alternativa, puede agregar un controlador al
ServicePointManager
'sServerCertificateValidationCallback
en el lado del cliente:pero tenga en cuenta que esta no es una buena práctica, ya que ignora por completo el certificado del servidor y le dice al administrador del punto de servicio que cualquier certificado que esté bien puede comprometer seriamente la seguridad del cliente. Puede refinar esto y hacer algunas comprobaciones personalizadas (para el nombre del certificado, hash, etc.). al menos puede evitar problemas durante el desarrollo al usar certificados de prueba.
fuente
Cuando tengo este problema es porque el client.config tenía sus puntos finales como:
pero el certificado esperaba
Cambiar los puntos finales para que coincidan con el FQDN del servidor resuelve mi problema. Sé que esta no es la única causa de este problema.
fuente
los dos primeros usan lambda, el tercero usa código regular ... espero que les sea útil
fuente
Su problema surge porque está utilizando una clave autofirmada. El cliente no confía en esta clave, ni la clave en sí misma proporciona una cadena para validar o una lista de revocación de certificados.
Tienes algunas opciones: puedes
desactivar la validación de certificado en el cliente (movimiento incorrecto, abundan los ataques de hombre en el medio)
use makecert para crear una CA raíz y crear certificados a partir de eso (movimiento correcto, pero todavía no hay CRL)
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)
comprar un certificado SSL de una de las CA de confianza (caro)
fuente
Una solución de una línea. Agregue esto en cualquier lugar antes de llamar al servidor en el lado del cliente:
Esto solo debe usarse con fines de prueba porque el cliente omitirá las comprobaciones de seguridad SSL / TLS.
fuente
Encontré el mismo problema y pude resolverlo con dos soluciones: primero, utilicé el complemento MMC "Certificados" para la "Cuenta de equipo" y arrastré el certificado autofirmado a la carpeta "Autoridades de certificación raíz de confianza" . Esto significa que la computadora local (la que generó el certificado) ahora confiará en ese certificado. En segundo lugar, noté que el certificado se generó para un nombre interno de computadora, pero se estaba accediendo al servicio web con otro nombre. Esto provocó una falta de coincidencia al validar el certificado. Generamos el certificado para computer.operations.local, pero accedimos al servicio web usando https://computer.internaldomain.companydomain.com . Cuando cambiamos la URL a la utilizada para generar el certificado, no obtuvimos más errores.
Tal vez solo cambiar las URL hubiera funcionado, pero al hacer que el certificado sea confiable, también evita la pantalla roja en Internet Explorer, donde le dice que no confía en el certificado.
fuente
Si usa .net core intente esto:
fuente
Por favor, siga los siguientes pasos:
Enlace de servicio abierto en IE.
Haga clic en la mención de error de certificado en la barra de direcciones y haga clic en Ver certificados.
Cheque emitido a: nombre.
Tome el nombre emitido y reemplace la mención localhost en el servicio y el nombre de la dirección base del punto final del cliente con un nombre de dominio completo (FQDN).
Por ejemplo: https: // localhost : 203 / SampleService.svc a https: // INL-126166-.groupinfra.com : 203 / SampleService.svc
fuente
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 ejecuta TLS 1.2.
Puedes arreglarlo usando:
fuente
Yo tuve el mismo problema. También había agregado certificados de CA en la tienda local, pero lo hice de 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 la cuenta de computadora (se agrega para cada cuenta en la máquina)
Aquí una imagen de lo que estoy hablando
Desde aquí ahora, puede agregar certificados de CA ( CA raíz de confianza y CA intermedia ), y todo funcionará bien
fuente
Tuve un problema similar con el certificado autofirmado. Podría resolverlo usando el nombre del certificado igual que el FQDN del servidor.
Idealmente, la parte SSL debe administrarse en el lado del servidor. No se requiere que el cliente instale ningún certificado para SSL. Además, algunas de las publicaciones mencionadas sobre eludir el SSL del código del cliente. Pero estoy totalmente en desacuerdo con eso.
fuente
Acabo de arrastrar el certificado a la carpeta "Autoridades de certificación raíz de confianza" y listo, todo funcionó bien.
Oh. Y primero agregué lo siguiente desde un símbolo del sistema del administrador:
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
fuente
Esto ocurrió al intentar conectarse al servicio WCF a través de. la IP, por ejemplo,
https://111.11.111.1:port/MyService.svc
mientras se usa un certificado vinculado a un nombre, por ejemplo, mysite.com.Cambiando al
https://mysite.com:port/MyService.svc
resuelto.fuente
Esto ocurrió cuando intentaba conectarse al servicio WCF usando solo el nombre de host, por ejemplo, https: //host/MyService.svc mientras usaba un certificado vinculado a un nombre, por ejemplo, host.mysite.com.
Cambiando a https://host.mysite.com/MyService.svc y esto lo resolvió.
fuente
Solo solucioné un problema similar.
Me di cuenta de que tenía un grupo de aplicaciones que se ejecutaba bajo una cuenta que solo tenía permiso de lectura sobre el certificado que se usaba.
La aplicación .NET pudo recuperar correctamente el certificado, pero esa excepción se produjo solo cuando se llamó a GetRequestStream ().
Los permisos de certificados se pueden administrar a través de la consola MMC
fuente
Si está utilizando .net core, durante el desarrollo puede omitir la validación de certificados mediante el uso de directivas del compilador. De esta manera solo se validará el certificado para su lanzamiento y no para la depuración:
fuente
Agregue esto a su código de cliente:
fuente