SSL认证失败:

  • 报错信息如下:

    sun.security.validator.ValidatorException:  
        PKIX path building failed:  
            sun.security.provider.certpath.SunCertPathBuilderException:  
                unable to find valid certification path to requested target
    
  • 问题发现环境:
    Java中使用了 HttpsURLConnection 去请求某资源,报此错误。

  • 错误原因:
    Java在访问SSL加密的网站时,需要从JDK的KeyStore 里面去查找相对应得可信证书,如果不能从默认或者指定的KeyStore 中找到可信证书,就会报这个错误。
    另外,Java所使用的证书仓库并不是Windows系统自带的证书管理。所以即使系统中包含此证书也不可以使用。
    解决这个问题的办法有两种:
    一是在发起https连接之前将服务器证书加到httpclient的信任证书列表中,这个相对来说比较复杂一些,很容易出错。
    另一种办法是让httpclient信任所有的服务器证书,这种办法相对来说简单很多,但安全性则差一些,但在某些场合下有一定的应用场景。

  • 解决方式一:将所访问的SSL站点证书添加至JVM。
    echo -n |openssl s_client -connect xxx.xxx.xxx.xxx:xxxx|sed -ne'/BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > xxxxx.cert
    此命令获取服务端证书链。
    keytool -importcert -alias xxx.xxx.xxx.xxx -keystore $JAVA_HOME/jre/lib/security/cacerts -storepass changeit -file xxxxx.cert
    此命令导入上述证书到JVM的证书库中。
    如果JAVA_HOME环境变量未设置,需要预先设置。 如:update-alternatives --list
    可以看到当前jdk的安装目录。如/usr/lib/java/jdk1.8.0_131
    则可以通过export JAVA_HOME=/usr/lib/java/jdk1.8.0_131来指定JAVA_HOME。

  • 解决方式二

    TrustManager[] trustAllCerts = new TrustManager[]{
                    new X509TrustManager() {
                        public java.security.cert.X509Certificate[] getAcceptedIssuers() {
                            return null;
                        }
    
                        public void checkClientTrusted(X509Certificate[] certs, String authType) {
                        }
    
                        public void checkServerTrusted(X509Certificate[] certs, String authType) {
                        }
                    }
            };
            SSLContext sc = SSLContext.getInstance("TLS");
            sc.init(null, trustAllCerts, new java.security.SecureRandom());
            HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
    
Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐