如何将自签名证书添加到HttpsURLConnection中的默认证书

问题描述

早上好。

我的问题是,我想创建一个HttpsURLConnection,既接受认的受信任证书,也接受我的自签名证书。

浏览互联网后,我发现了很多类似的问题,但不完全是我想要的。

特别好的代码here

这几乎是我想要的,但有所不同: 他们只会信任自签名证书,我也要信任自签名证书。

基本上,我不想从空的KeyStore开始,我想获取认的密钥库,无论它在哪里,无论它在哪里,它都已经在我的操作系统中包含认证书。

PS:我正在使用Android。

谢谢大家

解决方法

您基本上希望使用默认的受信任证书以及您自己的受信任证书。此处提供了类似的问题和答案:Registering multiple keystores in JVM

我也遇到了同样的问题,发现Code a Ray的答案确实很有用。在将他的代码片段用于多个项目之后,我从中创建了一个库。您可以在这里找到它:sslcontext-kickstart

对于您的用例,以下将证书包装在信任库文件中的窥探器可以解决问题:

SSLFactory sslFactory = SSLFactory.builder()
    .withDefaultTrustMaterial()
    .withTrustMaterial("my-truststore.jks","password".toCharArray())
    .build();

HttpsURLConnection httpsURLConnection = (HttpURLConnection) new URL(url).openConnection();
httpsURLConnection.setHostnameVerifier(sslFactory.getHostnameVerifier());
httpsURLConnection.setSSLSocketFactory(sslFactory.getSslContext().getSocketFactory());