2024-07-08
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
Posting blog ini dianalisis menggunakan Okhttp 4.6.0hostnameVerfier
Sesuai dengan namanya, fungsi utama metode ini adalah untuk mengidentifikasihostnname
legalitas. Kita dapat mengkonfigurasi Okhttp sendiri selama inisialisasihostnameVerfier
:
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();
TetapiAda banyak informasi online tentangverfiy
Mengembalikan nilai true secara langsung sangat berbahaya.Tentu saja jika vertify kembali gagal, berarti verifikasi hostname gagal dan permintaan http tidak dapat berhasil. Misalnya, jika saya memulai permintaan http dengan alamat blog saya, pesan kesalahannya adalah sebagai berikut:
{http errorCode=-500, mErrorMsg=Hostname yanchen.blog.csdn.net not verified:
certificate: sha256/tlnf6pbfeu257hnJ9e6j4A1ZWH3vVMzn3Zn3F9kLHdg=
DN: CN=*.blog.csdn.net
subjectAltNames: [*.blog.csdn.net]}
Tempat dimana vertify dijalankan adalah diKoneksi NyataDi dalam, setelah eksekusi.
Selain kustomisasihostnameVerfier
Selain itu, Okhttp menyediakan implementasi default. Sekarang mari kita menganalisis prinsip-prinsip internal.
OkHostnameVerifier dibangun ke dalam Okhttp, dan metode ini lolossession.peerCertificates[0] as X509Certificate
Dapatkan objek sertifikat
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() -