IDE 链接wss 或者https 证书认证不过去的问题总结

主要错误  :

Caused by: java.lang.RuntimeException: Unexpected error: java.security.InvalidAlgorithmParameterException: the trustAnchors parameter must be non-empty
    at java.base/sun.security.validator.PKIXValidator.<init>(PKIXValidator.java:89)
    at java.base/sun.security.validator.Validator.getInstance(Validator.java:181)
    at java.base/sun.security.ssl.X509TrustManagerImpl.getValidator(X509TrustManagerImpl.java:330)
    at java.base/sun.security.ssl.X509TrustManagerImpl.checkTrustedInit(X509TrustManagerImpl.java:180)
    at java.base/sun.security.ssl.X509TrustManagerImpl.checkTrusted(X509TrustManagerImpl.java:192)
    at java.base/sun.security.ssl.X509TrustManagerImpl.checkServerTrusted(X509TrustManagerImpl.java:133)
    at java.base/sun.security.ssl.ClientHandshaker.checkServerCerts(ClientHandshaker.java:1825)
    at java.base/sun.security.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:1655)
    at java.base/sun.security.ssl.ClientHandshaker.processMessage(ClientHandshaker.java:260)
    at java.base/sun.security.ssl.Handshaker.processLoop(Handshaker.java:1086)
    at java.base/sun.security.ssl.Handshaker.processRecord(Handshaker.java:1020)
    at java.base/sun.security.ssl.SSLSocketImpl.processInputRecord(SSLSocketImpl.java:1137)
    at java.base/sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:1074)
    at java.base/sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:973)
    at java.base/sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1402)
    at java.base/sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1429)
    ... 25 common frames omitted

原因分析1. 与jdk ide 有关  ide 在设置jdk 的时候 会加载 该jdk 目录下面的 证书文件 (路劲位置为 %JAVA_HOME%/jre/lib/security/cacerts)

        该文件加载过了 会在ide 里面记住   因为之前我设置了 一直没有好使  但是当我增加了 目标网站信任的证书后 在切换到其他的jdk 还是可以的 因此得出以上结论。

原因分析2. 与系统设置有关 具体在哪不详  得出以上结论是因为 我们公司 好几个人的ide 以及JDK 没有做任何设置都是正常的 都是1.8 的大版本我的小版本号都比他们的高 也不行。

原因分析3. 与JDK 的厂商有关 我使用的是 OpenJDK 他们使用的可能是  oracle 厂商。

 

以上是我对该文档分析。

我的解决方案:

  1. 首先换了 高版本的jdk 有不行 然后又升级了 新版本的ide 也不行。

  2. 检查本地的jdk 下面确实有对应的 证书文件 里面也有相关100 多个证书。

  3. 增加目标网站上的证书到自己的jdk (这一步做完后从新编译项目 就好了)

以下是我增加证书的方法和步骤:

  1. 找到目标网站  点击安全标识

 

 

 

 

 

 

 

 

 

 

 然后下步 默认选项就行保存好然后 复制到  jdk下面的jre/bin 目录里面

 

 

如上图所示 

 执行以下命令

keytool -import -v -trustcacerts -alias okexssl -file okexssl.cer -storepass changeit -keystore %JAVA_HOME%/jre/lib/security/cacerts

 

 

 确认就行

说明:

  changeit 是密码, java默认。

  keytool.exe是在 %JAVA_HOME%/jre/bin/目录下的,jdk默认自带。

  cacerts是文件(即将要把证书导入到其中的文件),在 %JAVA_HOME%/jre/lib目录

  keytool命令的 -ketstore参数 跟着的密钥库名称要加上双引号。

  是否信任此证书? [否]:"  ,那么请输入"y"。

其他相关命令

查看证书列表命令
keytool -list -keystore "%JAVA_HOME%/jre/lib/security/cacerts" -storepass changeit

删除证书命令 (该命令没有尝试过网上拷贝) keytool
-import -alias 文件名 -file 文件名.cer -keystore "%JAVA_HOME%/jre/lib/security/cacerts" -storepass changeit-trustcacerts

导入证书命令
keytool -import -v -trustcacerts -alias okexssl -file okexssl.cer -storepass changeit -keystore %JAVA_HOME%/jre/lib/security/cacerts

这些做完后从新设置ide 的jre 让其从新编译应该就行了 至少我的好了 

 

顺便说下 ide 的设置

 

 

 

 该位置每次从新切换会从新编译 等待一会就好了 

得出上面原因分析1 的结论是因为我从新换回我之前没有添加证书的那个 jdk 他也是可以建立链接也不报错 ,只要有一次添加了 刚刚添加证书那个jdk 启动成功后面怎么换都不会有问题。

以上是我总结的欢迎大家评论 

 

posted @ 2022-06-07 11:14  小学生很小  阅读(507)  评论(0编辑  收藏  举报