HTTPWebRequest El nombre del certificado remoto no coincide
-
19-08-2019 - |
Pregunta
Estoy tratando de hacer una llamada SSL usando HTTPWebRequest
y falla continuamente diciendo que no puede establecer confianza. He agregado una devolución de llamada a ServicePointManager.ServerCertificateValidationCallback
y devolver true
siempre funciona. Sin embargo, me gustaría que las cosas sean un poco más seguras que eso. Al mirar el SslPolicyErrors
en el método de validación, parece que recibo un error RemoteCertificateNameMismatch
. ¿Qué no coincide correctamente para causar este tipo de error?
(editar: ver comentarios en la respuesta) El sitio al que accedo utiliza HTTPBasic sobre SSL y una URL similar a v1.api.serviceprovider.com, con un certificado emitido a * .serviceprovider.com.
Solución
Problemas generales del certificado:
- certificado no emitido por un proveedor de certificados de confianza (debe estar en su cadena de confianza)
- certificado caducado
Este error específico generalmente significa que el certificado no se emite para el sitio que está visitando. Ejemplos:
- diferencia entre " www.yoursite.com " y "yoursite.com" (son diferentes; algunos grandes nombres se equivocan, lo que realmente me molesta ...)
- acceder como una dirección IP en lugar del nombre en el certificado; o v / v
- un equilibrador de carga que lo redirige a "servidor1, yoursite.com" pero dándole el certificado de " yoursite.com "
- un equilibrador de carga que lo pasa silenciosamente a "servidor1", que emite certificados para "servidor1", no el sitio
- ( editar ver comentarios ) un certificado comodín emitido para múltiples niveles, es decir, emitido a * .somesite.org, cuando está presionando foo.bar.somesite.org
La mayoría de estos son fácilmente identificables navegando al sitio y leyendo las advertencias que le da su navegador e inspeccionando el certificado que se emitió.