android - 现在 SSLSocketFactory 在 Android 上已被弃用,处理客户端证书身份验证的最佳方法是什么?

标签 android ssl okhttp pkcs#12 sslsocketfactory

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

但是,我还没有找到任何其他方法来处理客户端证书身份验证,而不使用 SSLSocketFactory,使用 OkHttp 或其他任何东西。那么在这种特殊情况下,最好的行动方案是什么? OkHttp 是否有另一种方式来处理这种身份验证?

最佳答案

如果您使用的是 https,则必须使用有效的证书。在您的开发阶段,您必须信任证书,如何? sslSocketFactory(SSLSocketFactory sslSocketFactory) 已弃用,取而代之的是 sslSocketFactory(SSLSocketFactory sslSocketFactory, X509TrustManager trustManager),您必须更新您的 gradle 文件 下面的代码将帮助您获得一个信任任何 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);

关于android - 现在 SSLSocketFactory 在 Android 上已被弃用,处理客户端证书身份验证的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31002159/

相关文章:

security - 一些用户报告网站不安全

ssl - 如何使用 OpenSSL 生成自签名 SSL 证书?

java - 试图关闭 OkHttp 的响应但缺少 AutoCloseable 接口(interface)

android - 如何在 Android 设备中对 PDF 进行数字签名?

Android 应用程序,与插入 USB 端口的设备通信

java - 不将值从推送通知传递给 Activity

ruby - SSL 验证错误 Ruby

android - 在Android中为OkHttp设置缓存的正确方法

android - 从 OkHttp 拦截器内部进行同步 Retrofit 调用

Android Studio 2.3 : Could not initialize class org. jetbrains.kotlin.android.actions.NewKotlinActivityAction