在 OkHttp3 中,不推荐使用以下内容[A]:
sslSocketFactory(SSLSocketFactory sslSocketFactory)
Run Code Online (Sandbox Code Playgroud)
它被替换为[B]:
sslSocketFactory(SSLSocketFactory sslSocketFactory, X509TrustManager trustManager).
Run Code Online (Sandbox Code Playgroud)
以下是我的问题:
有什么用的X509TrustManager在[B] ?
在创建SSLSocketFactory对象时已经可以指定 TrustManager 时,使用[B]而不是[A]的优点是什么?
在https://square.github.io/okhttp/3.x/okhttp/okhttp3/OkHttpClient.Builder.html#sslSocketFactory-javax.net.ssl.SSLSocketFactory- 他们谈到在使用[B]时避免反射,有人可以解释?
更多信息:
创建SSLSocketFactory对象时,已经可以在
sslContext.init(KeyManager[] arg0, TrustManager[] arg1, SecureRandom arg2).
Run Code Online (Sandbox Code Playgroud)
例如,我通过执行以下操作获得SSLSocketFactory对象:
public SSLSocketFactory getSSLSocketFactory() {
SSLContext sslContext = SSLContext.getInstance("TLS");
sslContext.init(getKeyManager(), getTrustManager(), new SecureRandom());
return sslContext.getSocketFactory();
}
Run Code Online (Sandbox Code Playgroud)
使用getTrustManager ()返回一个TrustManager[] 的方法,其中包含客户端应该信任的服务器证书。
现在,既然
sslSocketFactory(SSLSocketFactory sslSocketFactory, X509TrustManager trustManager)
Run Code Online (Sandbox Code Playgroud)
希望我提供一个X509TrustManager对象,我通过以下方式处理:
OkHttpClient okClient = …Run Code Online (Sandbox Code Playgroud)