解决PKIX:unable to find valid certification path to requested target 的问题

使用JDBC连接数据库
在使用如下连接方式时,会报错

package JDBC.com.SQLServer;

import java.sql.*;


public class Test_Sql {

    public static void main(String[] args) {
        try{  Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
            System.out.println("连接成功1");
        }
        catch(Exception e) {
            System.out.println("连接失败1");
        }
        String connectionUrl =
                "jdbc:sqlserver://127.0.0.1:1433;"
                        + "databaseName=GJZC;"
                        + "user=sa;"
                        + "password=123456;";
                        //+ "trustServerCertificate=true";
        Connection con;//处理与特定数据库的连接


        try {
            con = DriverManager.getConnection(connectionUrl);
            System.out.println("连接成功2");
            con.close();
        }
        catch(SQLException e) {
            System.out.println("请输入正确的表名"+e);
            System.out.println("连接失败2");
        }
    }
}

报错原因是com.microsoft.sqlserver.jdbc.SQLServerException: 驱动程序无法通过使用安全套接字层(SSL)加密与 SQL Server 建立安全连接。错误:“sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target”。 ClientConnectionId:244b069e-31fe-449a-aa16-6c10e1c4b684

原因是 新版的sqlserver jdbc驱动默认要求使用ssl链接来保证安全性
需要在配置文件中添加如下配置:trustServerCertificate=true
在这里插入图片描述

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
根据引用和[2],当在进行HTTPS请求时,如果服务器的证书无法通过Java的信任库验证,就会出现"PKIX: unable to find valid certification path to requested target"的错误。这个错误通常发生在以下情况下: 1. 服务器的证书是自签名的或使用未知的证书颁发机构签名的。 2. 信任库中缺少服务器证书的根证书或中间证书。 3. 信任库中的证书已过期或被撤销。 根据引用,在Java中,这个错误会由SunCertPathBuilderException引发。这个异常表示无法构建一个有效的证书路径来验证服务器的证书。 因此,当HttpRequest报"PKIX: unable to find valid certification path to requested target"错误时,通常是由于服务器证书无法在Java的信任库中找到或验证的原因导致的。解决这个问题的方法有以下几种: 1. 添加服务器证书到Java的信任库中:可以使用keytool命令将服务器证书导入到Java信任库中。首先,获取服务器证书,然后使用keytool命令将该证书导入到Java信任库中。具体步骤如下: - 获取服务器证书:可以使用浏览器访问服务器的HTTPS站点并导出证书。 - 使用keytool命令将证书导入到Java信任库中:运行以下命令,将路径替换为你的证书路径和别名替换为你喜欢的别名。 ``` keytool -import -alias <alias> -file <path_to_certificate> -keystore <path_to_keystore> ``` - 确保keytool命令使用的是正确的Java信任库,默认情况下,Java信任库位于$JAVA_HOME/lib/security/cacerts。 2. 使用自定义信任管理器:可以编写自定义的X509TrustManager来验证服务器证书。首先,创建一个实现X509TrustManager接口的类,然后在该类中实现验证逻辑。最后,将该自定义信任管理器设置为HttpClient或HttpURLConnection的信任管理器。这样就可以绕过Java信任库的验证,但需要注意安全风险。 3. 禁用证书验证:虽然不推荐,但可以通过禁用证书验证来解决问题。这个方法会使请求不再验证服务器的证书,但会增加安全风险。具体实现方法因使用的HTTP库而异。 总之,"PKIX: unable to find valid certification path to requested target"错误通常是由于服务器证书无法在Java的信任库中找到或验证的原因导致的。可以通过将服务器证书导入到Java信任库中、使用自定义信任管理器或禁用证书验证来解决这个问题
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值