• 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 启动成功后面怎么换都不会有问题。

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

  • 相关阅读:
    centOS6.8 安装Nginx
    Linux 的su 与sudo 的区别,查看所有用户
    查看电脑 8080端口号被哪个应用占用
    配置文件出错 org.apache.ibatis.binding.BindingException: Invalid bound statement (not found):
    IDEA 代码格式化,快捷键
    学习servlet心得
    nodejs笔记
    Tomcat 7.0.3x 启动慢并且遇到StackOverflowError的异常的解决办法
    国管公积金取房本
    前端准备技术汇总
  • 原文地址:https://www.cnblogs.com/wsming/p/16351096.html
Copyright © 2020-2023  润新知