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

sea*_*eal 15 java sql intellij-idea

我是 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();
    }
}
}
Run Code Online (Sandbox Code Playgroud)

我的 lib LIB中有这个

任何帮助表示赞赏!

小智 35

encrypt=true和添加trustServerCertificate=true到连接 URL。

\n
String  connectionURL = "jdbc:sqlserver://localhost:10020;databaseName=mydatabase;user=me;password=random_password;encrypt=true;trustServerCertificate=true";\n
Run Code Online (Sandbox Code Playgroud)\n

Microsoft 博客参考 -链接\n
查找以下摘录 -

\n
\n

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

\n

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

\n

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

\n

导入本文档中提到的所有证书。

\n

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

\n

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

\n

保存上述 MS 文档中的所有证书。Keytool 实用程序位于默认 Java 位置的 bin 文件夹中 (C:\\Program\nFiles\\Java\\jdk-14.0.2\\bin)。您需要使用命令提示符导航\n到该位置。然后您可以使用 keytool 命令导入\n之前保存的证书。当提示输入密码时,在密码中插入\n密钥 \xe2\x80\x9cchangeit\xe2\x80\x9d

\n

命令示例:

\n

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

\n

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

\n
\n