2024-07-08
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
Esta publicación de blog se analiza utilizando Okhttp 4.6.0hostnameVerfier
Como sugiere el nombre, la función principal de este método es identificarhostnname
de legalidad. Podemos configurar Okhttp nosotros mismos durante la inicialización.hostnameVerfier
:
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();
peroHay mucha información en línea sobreverfiy
Devolver verdadero directamente es muy peligroso.Por supuesto, si vertify devuelve fasle, significa que la verificación del nombre de host falla y la solicitud http no puede tener éxito. Por ejemplo, si inicio una solicitud http con la dirección de mi blog, el mensaje de error es el siguiente:
{http errorCode=-500, mErrorMsg=Hostname yanchen.blog.csdn.net not verified:
certificate: sha256/tlnf6pbfeu257hnJ9e6j4A1ZWH3vVMzn3Zn3F9kLHdg=
DN: CN=*.blog.csdn.net
subjectAltNames: [*.blog.csdn.net]}
El lugar donde se ejecuta vertify es enConexión RealEn el interior, tras la ejecución.
Además de la personalizaciónhostnameVerfier
Además, Okhttp proporciona una implementación predeterminada. Ahora analicemos los principios internos.
OkHostnameVerifier está integrado en Okhttp y este método pasasession.peerCertificates[0] as X509Certificate
Obtener el objeto del certificado
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() -