java - 即使添加了所需的证书,也无法找到请求的目标异常的有效证书路径
问题描述
即使执行了以下步骤,我也无法建立到 https 链接的连接
通过 openssl 将 .crt 和 .key 文件转换为 .p12
通过 keytool 将 .p12 文件转换为 .jks 文件(虽然我可以在代码中直接提到 .p12 )
- 将生成的 .jks 文件添加到 jdk/jre/lib/security 中的 cacerts
- 我的客户代码在这里
KeyStore trustStore = KeyStore.getInstance("JKS"); trustStore.load(new FileInputStream("test.jks"), "changeit".toCharArray()); TrustManagerFactory tmf = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm()); tmf.init(trustStore); TrustManager[] tms = tmf.getTrustManagers(); System.out.println(tms.length); //this is gives me 1 SSLContext sslContext = null; sslContext = SSLContext.getInstance("TLS"); sslContext.init(null, tms, new SecureRandom()); HttpsURLConnection.setDefaultSSLSocketFactory(sslContext.getSocketFactory()); URL url; url = new URL(" https://testurl.com"); HttpsURLConnection urlConn = (HttpsURLConnection) url.openConnection(); urlConn.setRequestMethod("POST"); urlConn.setRequestProperty("Content-Type", "application/json; utf-8"); urlConn.setRequestProperty("Accept", "application/json"); urlConn.setDoOutput(true); urlConn.setDoInput(true); urlConn.connect();
- 尝试在系统属性中添加信任库,但同样的错误。
- 尝试在 VM 参数中添加信任库/密钥库,仍然得到相同的错误。
我还应该尝试什么让它发挥作用?
解决方案
推荐阅读
- machine-learning - 自动权重分配 - Keras 和混淆矩阵中的不平衡数据
- javascript - 如何选择 ivy-tab 默认选项卡
- excel - Excel VBA:实现 Box Muller、Zigurrat 和均匀比率算法
- django - nginx 访问日志每 5 秒显示一次 HEAD 请求
- imagemagick - 合并多个具有相同名称的图像
- javascript - 当涉及另一个复选框时,使用带有“checkbox.checked === true”的 if/then 命令隐藏/显示元素时出现问题
- android - 相对于当前位置的 AutocompletePrediction/AutocompleteFilter
- typescript - tns 测试 android 在同步到设备后挂起
- c# - 在哪里使用异常处理
- spring-boot - `@ConditionalOnProperty` 与多个 `@PropertySource` 一起使用