Kettle: 连接SQL SERVER 2008报错
环境: pdi-ce-9.4.0.0-343.zip + JAVA 8.0.202+mssql-jdbc-13.6.0.jre8.jar: 连接SQL SERVER 2008
提示:
"encrypt" 屬性設定為 "true" 且 "trustServerCertificate" 屬性設為 "false",但驅動程式無法使用安全通訊端層 (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:d359ea45-fd0b-419a-8049-3ba29f7d7d5c
这个错误的核心原因是:客户端要求加密连接并验证服务器证书,但 SQL Server 提供的 TLS 证书无法通过验证,导致 SSL 握手失败。encrypt=true 强制加密,trustServerCertificate=false 要求证书必须受信任,两者组合下,证书本身或证书与服务器名的匹配有问题就会直接报错.
常见原因
1、证书是自签名证书:SQL Server 默认使用自签名证书,客户端不信任该证书颁发机构(CA),验证失败。
2、服务器名与证书不匹配:连接字符串中的服务器名(如 IP 或别名)与证书中的使用者名称(Subject Name)不一致。
3、证书已过期或未生效:系统时间不在证书的 Valid from 和 Valid to 之间。
4、TLS 协议版本不兼容:服务器只支持旧版 TLS(如 TLS 1.0),而客户端已禁用这些旧版本。
5、证书链不完整:中间 CA 证书未安装,客户端无法构建完整的信任链。
解决方案
方案一:开发/测试环境快速修复(推荐)
将 trustServerCertificate 改为 true,跳过证书验证。适合开发或测试环境,但会降低安全性。
jdbc:sqlserver://localhost:1433;databaseName=TestDB;encrypt=true;trustServerCertificate=true
即 JDBC.PROPERTIES 配置文件内容: MSSQL/type=javax.sql.DataSource MSSQL/driver=com.microsoft.sqlserver.jdbc.SQLServerDriver MSSQL/url=jdbc:sqlserver://localhost:1433;databaseName=TestDB;encrypt=true;trustServerCertificate=true; MSSQL/user=sa MSSQL/password=yourPassword
浙公网安备 33010602011771号