You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java无法连接Windows Docker部署的SQL Server:SSL认证路径错误

解决Docker部署的SQL Server与Java JDBC连接SSL证书验证失败问题

问题原因

Docker中运行的Microsoft SQL Server默认使用自签名SSL证书,而Java的默认信任库(cacerts)未包含该证书,导致JDBC驱动在建立SSL连接时无法完成证书链验证,抛出PKIX path building failed错误。VS Code的SQL Server扩展默认跳过了严格的SSL验证,因此可以正常连接。

解决方案

方案1:临时跳过SSL证书验证(仅适用于测试环境)

在JDBC连接URL中添加trustServerCertificate=true参数,让驱动直接信任服务器证书,无需验证证书链:

修改连接URL代码:

String url = String.format("jdbc:sqlserver://%s;databaseName=%s;user=%s;password=%s;trustServerCertificate=true", hostName, dbName, user, password);

也可以添加encrypt=false完全禁用SSL加密,但不推荐(会降低连接安全性):

String url = String.format("jdbc:sqlserver://%s;databaseName=%s;user=%s;password=%s;encrypt=false", hostName, dbName, user, password);

方案2:导入自签名证书到Java信任库(生产环境推荐)

将SQL Server的自签名证书导入Java的系统信任库,让Java信任该证书:

  1. 从Docker容器中导出证书

    • 先查看SQL Server容器ID:
      docker ps
      
    • 将容器内的证书文件复制到本地Windows目录(比如C:\temp):
      docker cp <容器ID>:/var/opt/mssql/data/mssql.pem C:\temp\mssql.pem
      
  2. 导入证书到Java信任库

    • 找到你的JDK/JRE安装目录下的cacerts文件,路径通常为:C:\Program Files\Java\jdk-17.x.x\lib\security\cacerts
    • 打开命令提示符(以管理员身份运行),执行keytool命令导入证书:
      keytool -importcert -file C:\temp\mssql.pem -alias mssql-docker -keystore "C:\Program Files\Java\jdk-17.x.x\lib\security\cacerts"
      
    • 输入信任库默认密码:changeit,然后输入yes确认导入证书。
  3. 重启Java应用,重新执行连接代码即可建立安全的SSL连接。


内容的提问来源于stack exchange,提问作者Mohsen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 22:10:11