如何在httpsurlconnection中将自签名证书添加到默认证书

d6kp6zgx  于 2021-07-05  发布在  Java
关注(0)|答案(1)|浏览(439)

早上好。
我的问题是,我想创造一个 HttpsURLConnection 它接受默认的可信证书,但也接受我的自签名证书。
我在网上查了一下,发现了很多类似的问题,但不完全是我想要的。
特别是,这里有一个很好的代码。
这正是我想要的,但有一点不同:他们将只信任自签名证书,我也希望信任自签名证书。
基本上我不想从一个空的开始 KeyStore ,我想得到默认的密钥库,不管它在哪里,它已经包含了我的操作系统中的默认证书。
附言:我在安卓工作。
谢谢大家

xam8gpfp

xam8gpfp1#

您基本上希望使用默认的可信证书以及您自己的可信证书。这里也提供了类似的问题和答案:在jvm中注册多个密钥库
我也遇到了同样的问题,发现代码a的答案非常有用。在将他的代码片段用于多个项目之后,我用它创建了一个库。您可以在这里找到:sslcontext kickstart
对于您的用例,以下snipper和您的证书 Package 在信任库文件中,应该可以做到这一点:

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());

相关问题