既然SSLSocketFactory在Android上已被弃用,那么处理客户端证书身份验证的最佳方法是什么



我正在开发一个需要客户端证书身份验证的Android应用程序(使用PKCS 12文件)。在所有apache.http.*被弃用之后,我们已经开始了一项相当大的网络层重构工作,我们决定使用OkHttp作为替代,到目前为止,我非常喜欢这一点。

然而,我还没有找到任何其他方法来处理客户端证书身份验证,而不使用SSLSocketFactory、OkHttp或其他任何方法。那么,在这种特殊情况下,最好的行动方案是什么呢?OkHttp还有其他方法可以处理这种身份验证吗?

如果使用https,则必须使用有效的证书。在您的开发阶段,您必须信任证书,如何信任?sslSocketFactory(SSLSocketFactory sslSocketFactory)已弃用,它已被sslSocketFactory(SSLSocketFactory sslSocketFactory, X509TrustManager trustManager)取代,您必须更新渐变文件下面的代码将帮助您获得一个信任任何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类。HttpClient有自己的一个,与HttpClient的其余部分一起被弃用。但是,其他所有人都将使用SSLSocketFactory的更传统的javax.net.ssl版本,该版本并未被弃用(感谢$DEITY)。

相关内容

  • 没有找到相关文章

最新更新