HTTPWebRequest Incompatibilité du nom de certificat distant
-
19-08-2019 - |
Question
J'essaie de passer un appel SSL à l'aide de HTTPWebRequest
, qui échoue continuellement en disant qu'il ne peut pas établir une relation de confiance. J'ai ajouté un rappel à ServicePointManager.ServerCertificateValidationCallback
et renvoyer true
fonctionne toujours. Cependant, j'aimerais que les choses soient un peu plus sûres que cela. En regardant SslPolicyErrors
dans la méthode de validation, il semble que je reçois une erreur RemoteCertificateNameMismatch
. Qu'est-ce qui ne correspond pas correctement pour causer ce genre d'erreur?
(éditer: voir les commentaires dans la réponse) Le site auquel j'accède utilise HTTPBasic sur SSL et une URL du type v1.api.serviceprovider.com, avec un certificat délivré à * .serviceprovider.com.
La solution
Problèmes généraux liés aux certificats:
- certificat non émis par un fournisseur de certificats de confiance (doit figurer dans votre chaîne de confiance)
- certificat expiré
Cette erreur spécifique signifie généralement que le certificat n'est pas émis pour le site que vous visitez. Exemples:
- différence entre " www.votresite.com " et " yoursite.com " (Ils sont différents; certains grands noms se trompent, ce qui me gêne vraiment ...)
- accédant en tant qu’adresse IP au lieu du nom figurant sur le certificat; ou v / v
- un équilibreur de charge vous redirigeant vers & server; server1, yoursite.com " mais en vous donnant le certificat de "yoursite.com"
- un équilibreur de charge vous transmettant silencieusement à "serveur1", qui émet des certificats pour "serveur1", et non au site
- ( modifier voir les commentaires ): un certificat générique émis pour plusieurs niveaux, c'est-à-dire délivré à * .somesite.org, lorsque vous cliquez sur foo.bar.somesite.org
La plupart d'entre eux sont facilement identifiables en naviguant sur le site, en lisant les avertissements que vous donne votre navigateur et en inspectant le certificat délivré.