2024-07-08
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
Ce billet de blog est analysé à l'aide d'Okhttp 4.6.0hostnameVerfier
Comme son nom l’indique, la fonction principale de cette méthode est d’identifierhostnname
de légalité. Nous pouvons configurer nous-mêmes Okhttp lors de l'initialisationhostnameVerfier
:
new OkHttpClient.Builder()
.connectTimeout(20, TimeUnit.SECONDS)
.readTimeout(20, TimeUnit.SECONDS)
.writeTimeout(35, TimeUnit.SECONDS)
.hostnameVerifier(new HostnameVerifier() {
@Override
public boolean verify(String hostname, SSLSession session) {
//注意这里在生产环境中千万不要直接写死true
return true;
}
})
.build();
maisIl existe de nombreuses informations en ligne surverfiy
Revenir directement vrai est très dangereux.Bien sûr, si vertify renvoie fasle, cela signifie que la vérification du nom d'hôte échoue et que la requête http ne peut pas aboutir. Par exemple, si je lance une requête http avec l'adresse de mon blog, le message d'erreur est le suivant :
{http errorCode=-500, mErrorMsg=Hostname yanchen.blog.csdn.net not verified:
certificate: sha256/tlnf6pbfeu257hnJ9e6j4A1ZWH3vVMzn3Zn3F9kLHdg=
DN: CN=*.blog.csdn.net
subjectAltNames: [*.blog.csdn.net]}
L'endroit où vertify est exécuté est àConnexion RéelleA l'intérieur, après exécution.
En plus de la personnalisationhostnameVerfier
De plus, Okhttp fournit une implémentation par défaut. Analysons maintenant les principes internes.
OkHostnameVerifier est intégré à Okhttp et cette méthode passesession.peerCertificates[0] as X509Certificate
Récupérer l'objet certificat
override fun verify(host: String, session: SSLSession): Boolean {
return try {
verify(host, session.peerCertificates[0] as X509Certificate)
} catch (_: SSLException) {
false
}
}
fun verify(host: String, certificate: X509Certificate): Boolean {
return when {
host.canParseAsIpAddress() -