java.security.InvalidAlgorithmParameterException: the trustAnchors parameter must be non-empty

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/

点击地址栏 左侧的小锁按钮,在弹出的下拉单中选择 “连接时安全的” 菜单,如下图:

java.security.InvalidAlgorithmParameterException: the trustAnchors parameter must be non-empty_第1张图片

 

点击 “证书有效“

java.security.InvalidAlgorithmParameterException: the trustAnchors parameter must be non-empty_第2张图片
在弹出窗口中进入 ”详细信息“的标签页, 点击下方的“导出”按钮后, 选择一个本地的下载路径之后进行下载, 这里下载到 C盘的cert 目录, 证书文件名是:mvnrepo.crt

java.security.InvalidAlgorithmParameterException: the trustAnchors parameter must be non-empty_第3张图片 

  1. 到jdk的security文件夹下(我的位置:D:\Program Files\Java\jdk1.7.0_71\jre\lib\security)
  2. 输入cmd进入命令行
  3. 输入命令
    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协议中的服务器端和客户端身份验证,以及数字签名和加密等操作

  4. 执行上面的命令后需要输入秘钥,jdk秘钥默认是:changeit

     

  5. 输入命令:可以看到已添加的秘钥

    keytool -list -keystore keystore.jks

    java.security.InvalidAlgorithmParameterException: the trustAnchors parameter must be non-empty_第4张图片

     

  6. 在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()); 

    指定信任的证书位置即可

        

参考链接:Java如何安装https证书_jdk导入https证书_oscar999的博客-CSDN博客

你可能感兴趣的:(java,https,WebService)