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

标签 java android ssl httpsurlconnection

早上好。
我的问题是,我想创建一个 HttpsURLConnection接受默认的受信任证书,但也接受我的自签名证书。
在互联网上环顾四周后,我发现了很多类似的问题,但并不是我想要的。
特别是,一个好的代码是here .
这几乎是我想要的,但有所不同:
他们只会信任自签名证书,我也想信任自签名证书。
基本上我不想从一个空的KeyStore开始,我想获得默认 keystore ,无论它在哪里/在哪里,它已经包含我的操作系统中的默认证书。
PS:我在安卓上工作。
谢谢大家

最佳答案

您基本上想要使用默认的受信任证书以及您自己的受信任证书。此处提供了类似的问题和答案:Registering multiple keystores in JVM
我也遇到了同样的问题,找到了Code a Ray的答案真的很有用。在将他的代码 fragment 用于多个项目后,我用它创建了一个库。你可以在这里找到它: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());

关于java - 如何将自签名证书添加到 HttpsURLConnection 中的默认证书,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63723029/

相关文章:

java - 如何从扫描仪读取字符串,并将每个字母转换为不同的值?

android - 如何通过android中的 Intent 将字典从一个 Activity 传递到另一个 Activity

ssl - Openfire SSL 证书

go - 净/http : TLS handshake timeout when call external https from google cloud

java - 在 Clojure 中写入文件

java - 使用 JDBC 时更改 DB2 的 session 用户

android - 如何检索存储在 sqlite 中的日期并将其转换为 timeStamp 以便能够将其与当前日期进行比较?

android - 在Android中使用webview postUrl打开浏览器后获取白屏

java - 在jboss中配置ssl

具有不同可扩展级别的故障转移的 Java 程序