java okhttp https_OkHttp是否支持接受自签名SSL证书?

本文介绍了如何在OkHttpClient 3.0中配置信任自签名SSL证书的方法,包括读取pkcs12格式的证书文件,初始化SSLContext和TrustManager,确保与自签名证书兼容。
摘要由CSDN通过智能技术生成

从我们的应用程序获取OkHttpClient 3.0实例的两种方法,这些实例可以从密钥库中识别您的自签名证书(使用Android项目“原始”资源文件夹中准备好的pkcs12证书文件):

private static OkHttpClient getSSLClient(Context context) throws

NoSuchAlgorithmException,

KeyStoreException,

KeyManagementException,

CertificateException,

IOException {

OkHttpClient client;

SSLContext sslContext;

SSLSocketFactory sslSocketFactory;

TrustManager[] trustManagers;

TrustManagerFactory trustManagerFactory;

X509TrustManager trustManager;

trustManagerFactory = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());

trustManagerFactory.init(readKeyStore(context));

trustManagers = trustManagerFactory.getTrustManagers();

if (trustManagers.length != 1 || !(trustManagers[0] instanceof X509TrustManager)) {

throw new IllegalStateException("Unexpected default trust managers:" + Arrays.toString(trustManagers));

}

trustManager = (X509TrustManager) trustManagers[0];

sslContext = SSLContext.getInstance("TLS");

sslContext.init(null, new TrustManager[]{trustManager}, null);

sslSocketFactory = sslContext.getSocketFactory();

client = new OkHttpClient.Builder()

.sslSocketFactory(sslSocketFactory, trustManager)

.build();

return client;

}

/**

* Get keys store. Key file should be encrypted with pkcs12 standard. It    can be done with standalone encrypting java applications like "keytool". File password is also required.

*

* @param context Activity or some other context.

* @return Keys store.

* @throws KeyStoreException

* @throws CertificateException

* @throws NoSuchAlgorithmException

* @throws IOException

*/

private static KeyStore readKeyStore(Context context) throws

KeyStoreException,

CertificateException,

NoSuchAlgorithmException,

IOException {

KeyStore keyStore;

char[] PASSWORD = "12345678".toCharArray();

ArrayList certificates;

int certificateIndex;

InputStream certificate;

certificates = new ArrayList<>();

certificates.add(context.getResources().openRawResource(R.raw.ssl_pkcs12));

keyStore = KeyStore.getInstance("pkcs12");

for (Certificate certificate : certificates) {

try {

keyStore.load(certificate, PASSWORD);

} finally {

if (certificate != null) {

certificate.close();

}

}

}

return keyStore;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值