2024-07-08
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
Tämä blogikirjoitus on analysoitu käyttämällä Okhttp 4.6.0:aahostnameVerfier
Kuten nimestä voi päätellä, tämän menetelmän päätehtävä on tunnistaahostnname
laillisuudesta. Voimme määrittää Okhttp:n itse alustuksen aikanahostnameVerfier
:
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();
muttaNetistä löytyy paljon tietoa aiheestaverfiy
Totuuden palauttaminen suoraan on erittäin vaarallista.Tietenkin, jos verify palauttaa faslen, se tarkoittaa, että isäntänimen vahvistus epäonnistuu ja http-pyyntö ei onnistu. Jos esimerkiksi aloitan http-pyynnön blogini osoitteella, virheilmoitus on seuraava:
{http errorCode=-500, mErrorMsg=Hostname yanchen.blog.csdn.net not verified:
certificate: sha256/tlnf6pbfeu257hnJ9e6j4A1ZWH3vVMzn3Zn3F9kLHdg=
DN: CN=*.blog.csdn.net
subjectAltNames: [*.blog.csdn.net]}
Paikka, jossa verifiointi suoritetaan, on osoitteessaRealConnectionSisällä, suorituksen jälkeen.
Räätälöinnin lisäksihostnameVerfier
Lisäksi Okhttp tarjoaa oletustoteutuksen, analysoidaan nyt sisäiset periaatteet.
OkHostnameVerifier on sisäänrakennettu Okhttp:een, ja tämä menetelmä kulkee läpisession.peerCertificates[0] as X509Certificate
Hanki sertifikaattiobjekti
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() -