Mancata corrispondenza del nome del certificato remoto HTTPWebRequest
-
19-08-2019 - |
Domanda
Sto tentando di effettuare una chiamata SSL utilizzando HTTPWebRequest
e non riesco a stabilire la fiducia. Ho aggiunto un callback a ServicePointManager.ServerCertificateValidationCallback
e restituendo true
funziona sempre. Tuttavia, vorrei che le cose fossero un po 'più sicure di così. Osservando SslPolicyErrors
nel metodo di convalida sembra che visualizzi un errore RemoteCertificateNameMismatch
. Cosa non corrisponde correttamente per causare questo tipo di errore?
(modifica: vedi commenti nella risposta) Il sito a cui accedo utilizza HTTPBasic su SSL e un URL simile a v1.api.serviceprovider.com, con un certificato rilasciato a * .serviceprovider.com.
Soluzione
Problemi di certificato generali:
- certificato non emesso da un fornitore di certificati attendibili (deve essere nella catena di fiducia)
- certificato scaduto
Questo errore specifico di solito indica che il certificato non è stato emesso per il sito che si sta colpendo. Esempi:
- differenza tra " www.yoursite.com " e " yoursite.com " (sono diversi; alcuni grandi nomi sbagliano, il che mi dà davvero fastidio ...)
- accedendo come indirizzo IP anziché come nome nel certificato; o v / v
- un bilanciamento del carico che reindirizza l'utente a " server1, yoursite.com " ma dandoti il ??certificato da " yoursite.com "
- un bilanciamento del carico che ti passa silenziosamente a "server1", che sta emettendo certificati per "server1", non il sito
- ( modifica vedi commenti ) un certificato jolly emesso per più livelli - ovvero rilasciato a * .somesite.org, quando si colpisce foo.bar.somesite.org
La maggior parte di questi sono facilmente identificabili accedendo al sito e leggendo gli avvisi forniti dal browser e controllando il certificato emesso.