Technologieaustausch

Detaillierte Erklärung von Okhttp hostnameVerifier

2024-07-08

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

Methodeneinführung

Dieser Blogbeitrag wird mit Okhttp 4.6.0 analysierthostnameVerfierWie der Name schon sagt, besteht die Hauptfunktion dieser Methode in der Identifizierunghostnname der Legalität. Wir können Okhttp während der Initialisierung selbst konfigurierenhostnameVerfier

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();

AberEs gibt online viele Informationen darüberverfiyDie direkte Rückgabe von „true“ ist sehr gefährlich.Wenn vertify „fasle“ zurückgibt, bedeutet dies natürlich, dass die Überprüfung des Hostnamens fehlschlägt und die http-Anfrage nicht erfolgreich sein kann. Wenn ich beispielsweise eine http-Anfrage mit meiner Blog-Adresse initiiere, lautet die Fehlermeldung wie folgt:
Fügen Sie hier eine Bildbeschreibung ein

{http errorCode=-500, mErrorMsg=Hostname yanchen.blog.csdn.net not verified:
    certificate: sha256/tlnf6pbfeu257hnJ9e6j4A1ZWH3vVMzn3Zn3F9kLHdg=
    DN: CN=*.blog.csdn.net
    subjectAltNames: [*.blog.csdn.net]}

Der Ort, an dem Vertify ausgeführt wird, istEchte VerbindungDrinnen, nach der Hinrichtung.
Fügen Sie hier eine Bildbeschreibung ein

Zusätzlich zur IndividualisierunghostnameVerfierDarüber hinaus bietet Okhttp eine Standardimplementierung. Lassen Sie uns nun die internen Prinzipien analysieren.

Kernprinzipien

OkHostnameVerifier ist in Okhttp integriert und diese Methode wird erfolgreich ausgeführtsession.peerCertificates[0] as X509CertificateHolen Sie sich das Zertifikatobjekt

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() -