驱动程序无法使用安全套接字层 (SSL) 加密与 SQL Server 建立安全连接。错误:“PKIX 路径构建失败:

2023-12-24

我是 SQL(Microsoft SQL Server Management)新手,我正在尝试将其与 IntelliJ 连接

我收到以下错误: com.microsoft.sqlserver.jdbc.SQLServerException:驱动程序无法使用安全套接字层 (SSL) 加密与 SQL Server 建立安全连接。错误:“PKIX 路径构建失败:sun.security.provider.certpath.SunCertPathBuilderException:无法找到请求目标的有效证书路径”。

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;

public class MyJDBC {

public static void main(String[] args) {


    String  connectionURL = "jdbc:sqlserver://localhost:10020;databaseName=mydatabase;user=me;password=random_password";
    try {
        System.out.print("Connecting to the server......");
        try (Connection connection = DriverManager.getConnection(connectionURL))   {
            System.out.println("Connected to the Server.");
        }
    }catch (Exception e){
        System.out.println("I am not connected to the Server");
        e.printStackTrace();
    }
}
}

我的库里有这个LIB https://i.stack.imgur.com/FlaRU.png

任何帮助表示赞赏!


Add encrypt=true and trustServerCertificate=true到连接网址。

String  connectionURL = "jdbc:sqlserver://localhost:10020;databaseName=mydatabase;user=me;password=random_password;encrypt=true;trustServerCertificate=true";

微软博客参考 -link https://techcommunity.microsoft.com/t5/azure-database-support-blog/pkix-path-building-failed-unable-to-find-valid-certification/ba-p/2591304
找到下面的摘录 -

这是 Java 证书存储中的一个问题。作为一个快速解决方法,如果 您在连接字符串中启用 TrustServerCertificate=True , JDBC 连接成功。当 TrustServerCertificate 设置为 true,传输层将使用 SSL 来加密通道并 绕过遍历证书链来验证信任。如果 TrustServerCertificate 设置为 true 并打开加密, 即使加密,也将使用服务器上指定的加密级别 设置为 false。否则连接会失败。然而,对于 出于安全考虑,不建议绕过 证书验证。因此,要解决该问题,请按照以下步骤操作 下面更改连接字符串并导入所需的 证书。

更改连接字符串以指向 Java 证书路径

String connectionUrl = "jdbc:sqlserver://localhost:1433;" + "databaseName=AdventureWorks;integratedSecurity=true;" + "encrypt=true; trustServerCertificate=false;" + "trustStore= C:\Program Files\Java\jdk-14.0.2\lib\cacert;trustStorePassword=changeit";

导入本文提到的所有证书document https://www.microsoft.com/pki/mscorp/cps/default.htm.

注意:要将上述证书导入密钥库cacerts,请 使用以下命令,请注意您必须提及信任库和 连接字符串中的信任库密码才能成功连接。 在 Java 证书存储区中导入缺少的证书的步骤

从这里下载所有证书,将它们存储在客户端的某个位置 主机,然后使用 keytool 实用程序将这些证书导入到 信任库。请按照以下步骤操作:

保存上述 MS 文档中的所有证书。 Keytool 实用程序位于 默认 Java 位置的 bin 文件夹 (C:\Program 文件\Java\jdk-14.0.2\bin)。您需要使用命令提示符进行导航 到那个位置。然后就可以使用keytool命令导入了 之前保存的证书。当提示输入密码时,插入 输入密码“changeit”

命令示例:

keytool -importcert -trustcacerts -alias TLS1 -file "C:\Users\Documents\Microsoft RSA TLS CA 01.crt" -keystore "C:\Program Files\Java\jdk-14.0.2\lib\security\cacerts"

keytool -importcert -trustcacerts -alias TLS2 -file "C:\Users\Documents\Microsoft RSA TLS CA 02.crt" -keystore "C:\Program Files\Java\jdk-14.0.2\lib\security\cacerts"

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

驱动程序无法使用安全套接字层 (SSL) 加密与 SQL Server 建立安全连接。错误:“PKIX 路径构建失败: 的相关文章

随机推荐