WebService调用Https接口报错:
Unexpected error: java.security.InvalidAlgorithmParameterException: the trustAnchors parameter must be non-empty
试过将证书加入Jdk的cacerts,也试过通过InstallCert.java生成jssecacerts都 没有成功!
以下是我成功的方式:
先将https证书拿下来:
这里以导入Maven 中央库的证书为例,使用Chrome下载证书。
在浏览器输入Maven 中央库地址: https://repo.maven.apache.org/maven2/
点击地址栏 左侧的小锁按钮,在弹出的下拉单中选择 “连接时安全的” 菜单,如下图:
点击 “证书有效“
在弹出窗口中进入 ”详细信息“的标签页, 点击下方的“导出”按钮后, 选择一个本地的下载路径之后进行下载, 这里下载到 C盘的cert 目录, 证书文件名是:mvnrepo.crt
- 到jdk的security文件夹下(我的位置:D:\Program Files\Java\jdk1.7.0_71\jre\lib\security)
- 输入cmd进入命令行
- 输入命令
keytool -import -alias trustCacerts -file D:\mvnrepo.crt -keystore keystore.jks
PS:
trustCacerts是起的别名,通过alias指定
D:\mvnrepo.crt是https证书的位置,通过-file指定
-keystore.jks是秘钥库文件,通过-keystore指定
.jks文件是Java密钥库文件的一种类型,它用于存储密钥和证书,以便在Java应用程序中进行安全通信。这些文件通常用于SSL/TLS协议中的服务器端和客户端身份验证,以及数字签名和加密等操作 -
执行上面的命令后需要输入秘钥,jdk秘钥默认是:changeit
-
输入命令:可以看到已添加的秘钥
keytool -list -keystore keystore.jks
-
在java代码调用https接口前写以下代码:
System.setProperty("javax.net.ssl.trustStore", "C://Program Files//Java//jdk1.7.0_55//jre//lib//security//keystore.jks"); //key路径(jks存放地址) System.setProperty("javax.net.ssl.trustStorePassword","changeit");//密码 System.setProperty("java.protocol.handler.pkgs","com.sun.net.ssl.internal.www.protocol"); java.security.Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider());
指定信任的证书位置即可