OkHttp3中的SSLSocketFactory和TrustManager冗余

时间:2018-11-08 05:10:46

标签: java okhttp3 sslsocketfactory x509trustmanager

在OkHttp3中,不推荐使用以下内容: [A]

test_new = separate_rows(df1, "Var_B", convert = FALSE) %>%
  separate_rows("Var_A") %>%
  arrange(Var_A)

[B] 代替:

    sslSocketFactory(SSLSocketFactory sslSocketFactory) 

这是我的问题:


更多信息:

在创建 SSLSocketFactory 对象时,已经可以在

中指定一个trustManager。
    sslSocketFactory(SSLSocketFactory sslSocketFactory, X509TrustManager trustManager).

例如,通过执行以下操作,我得到了一个 SSLSocketFactory 对象:

sslContext.init(KeyManager[] arg0, TrustManager[] arg1, SecureRandom arg2).

使用 getTrustManager ()的方法可返回 TrustManager [] ,该方法包含客户端应信任的服务器证书。

现在,因为

public SSLSocketFactory getSSLSocketFactory() {
  SSLContext sslContext = SSLContext.getInstance("TLS");
  sslContext.init(getKeyManager(), getTrustManager(), new SecureRandom());
  return sslContext.getSocketFactory();
}

希望我提供一个 X509TrustManager 对象,我可以这样做:

sslSocketFactory(SSLSocketFactory sslSocketFactory, X509TrustManager trustManager) 

但是,我感觉这不是他们期望我们使用它的方式。因此,欢迎任何投入。

谢谢。

1 个答案:

答案 0 :(得分:0)

该方法使用反射。原因在OkHttp documentation中说明:

/**
 * Sets the socket factory used to secure HTTPS connections. 
 * If unset, the system default will be used.
 *
 * @deprecated [SSLSocketFactory] does not expose its [X509TrustManager], which is
 *     a field that OkHttp needs to build a clean certificate chain. This method
 *     instead must use reflection to extract the trust manager. Applications should
 *     prefer to call `sslSocketFactory(SSLSocketFactory, X509TrustManager)`, 
 *     which avoids such reflection.
 */