2016-11-09 2233 views
2

我试图让使用HTTPS调用(改造2.0,okhttp3)我已经包括SSL证书和它正常工作与
OkHttpClient.Builder builder = new OkHttpClient.Builder(); builder.sslSocketFactory(getSSLConfig());
但它显示的SSLSocketFactory(getSSLConfig())作为不推荐使用,并提供其他选项
sslSocketFactory(SSLSocketFactory sslSocketFactory, X509TrustManager trustManager)
我想更新我的代码,并使用新选项,而不是弃用的方法 我在网上搜索,但找不到任何好的参考。如果任何人可以提供一些很好的参考,这个问题将是非常有帮助的OkHttpClient.Builder的SSLSocketFactory已过时

+0

可能的复制(https://开头计算器.COM /问题/ 31002159 /现已是-的SSLSocketFactory-被弃用,上Android的东西,想成为最最好的办法-T) –

回答

0

你需要一个有效的证书。创建信任任何SSL证书的可信OkHttpClient。试试这个代码:

TrustManagerFactory trustManagerFactory = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm()); 
trustManagerFactory.init((KeyStore) null); 
TrustManager[] trustManagers = trustManagerFactory.getTrustManagers(); 
if (trustManagers.length != 1 || !(trustManagers[0] instanceof X509TrustManager)) { 
throw new IllegalStateException("Unexpected default trust managers:" + Arrays.toString(trustManagers)); 
} 
X509TrustManager trustManager = (X509TrustManager) trustManagers[0]; 
SSLContext sslContext = SSLContext.getInstance("SSL"); 
sslContext.init(null, new TrustManager[] { trustManager }, null); 
SSLSocketFactory sslSocketFactory = sslContext.getSocketFactory(); 
OkHttpClient client = new OkHttpClient.Builder().sslSocketFactory(sslSocketFactory, trustManager); 

更多资讯:[?现在SSLSocketFactory的是在Android过时了,这将是处理客户端证书认证的最好方式]的Now that SSLSocketFactory is deprecated on Android, what would be the best way to handle Client Certificate Authentication?