Httpwebrequest Remoto Certificado incompatibilidade de nome
-
19-08-2019 - |
Pergunta
Eu estou tentando fazer uma chamada de SSL usando HTTPWebRequest
e sua falha continuamente dizendo que não pode estabelecer a confiança. Eu adicionei uma chamada de retorno para ServicePointManager.ServerCertificateValidationCallback
e retornando true
sempre funciona. No entanto, eu gostaria que as coisas fossem um pouco mais seguro do que isso. Olhando para o SslPolicyErrors
no método de validação parece que eu estou recebendo um erro RemoteCertificateNameMismatch
. O que não está combinando corretamente para causar esse tipo de erro?
(edit: ver comentários na resposta) O site que estou acessando usos HTTPBasic mais de SSL e um URL algo como v1.api.serviceprovider.com, com um certificado emitido para * .serviceprovider.com.
Solução
problemas de certificado gerais:
- certificado não emitido por um fornecedor certificado confiável (deve ser em sua cadeia de confiança)
- certificado expirou
Este erro específico geralmente significa que o certificado não é emitido para o site que você está acertando. Exemplos:
- diferença entre "www.yoursite.com" e "yoursite.com" (eles são diferentes, alguns grandes nomes se esta errado, o que realmente me irrita ...)
- acessando como um endereço IP em vez do nome do cert; ou v / v
- um balanceador de carga redirecionando você para "server1, yoursite.com", mas dando-lhe o certificado de "yoursite.com"
- um balanceador de carga silenciosamente passando-lhe para "server1", que é a emissão de certificados para "server1", e não o site
- ( editar ver comentários ) um certificado curinga emitido para vários níveis - ou seja emitido para * .somesite.org, quando você está acertando foo.bar.somesite.org
A maioria destes são facilmente identificáveis, navegando para o site e ler os avisos que o seu navegador lhe dá, e fiscalizar o certificado que foi emitido.