【发布时间】:2020-10-16 08:02:52
【问题描述】:
我发现一篇文章与我遇到的问题很接近。就是这个:
我可以提供整个堆栈跟踪,但修剪后的版本有这一系列错误:
com.microsoft.sqlserver.jdbc.SQLServerException:驱动程序无法使用安全套接字层 (SSL) 加密建立与 SQL Server 的安全连接。错误:“java.security.cert.CertificateException:证书不符合算法约束”。 ClientConnectionId:e7a5ebc2-d489-4743-85ba-7873926508fe
原因:javax.net.ssl.SSLHandshakeException:
java.security.cert.CertificateException:证书不符合算法约束原因:java.security.cert.CertificateException:证书不符合算法约束
原因:java.security.cert.CertPathValidatorException:算法约束检查在密钥大小限制上失败。与证书一起使用的 RSA 1024 位密钥:CN=SSL_Self_Signed_Fallback。用法是 tls 服务器
JDBC 连接到一个没有启用连接加密或我知道的任何安全性的 SQL Server 2012。我和我们的数据库人员谈过,他说他知道的连接没有安全性。所以,我不确定为什么 MS 驱动程序继续抱怨 SSL 连接。
此 Linux 服务器 (CentOS 8) 有两个使用 JDBC 连接的 tomcat 安装。我有一个 Tomcat 8.0.32 实例,它使用 JTDS 驱动程序连接到 SQL Server 2012 实例,该驱动程序在连接上完全没有问题。我尝试将该驱动程序切换到 MS 驱动程序,然后它遇到了同样的错误。所以我把它换回来了。但是Tomcat(9.0.33)的第二次安装有一个需要JDBC 4.0或更高版本驱动程序的应用程序,而JTDS驱动程序只有3.0驱动程序,所以我必须使用MS驱动程序。但是,我不知道如何获得成功的连接。
通过互联网挖掘,我发现了对 jsse.jar 的引用并安装了正确的证书(尽管没有具体说明如何执行此操作或为什么这样做)。我还挖了一篇文章,说 JTDS 驱动程序使用 NTLM 进行连接(不是 100% 确定这一点,因为我在 JTDS 的连接中没有引用域)。无论如何,我只需要一些关于如何配置 MS 驱动程序以从 Linux 连接到不安全的 SQL Server 2012 的指导。我发现的 Microsoft 参考文献解决了安全连接,但没有关于不安全的连接。
运行 Java 版本:
-
openjdk 版本“1.8.0_252”
-
OpenJDK 运行时环境(内部版本 1.8.0_252-b09)
-
OpenJDK 64 位服务器 VM(内部版本 25.252-b09,混合模式)
driverClassName=com.microsoft.sqlserver.jdbc.SQLServerDriver url=jdbc:sqlserver://192.168.80.214:1433;databaseName=DB_Central;
IntegratedSecurity=true;authenticationScheme=NTLM;domain=mydomain.org;
也试过了:
url=jdbc:sqlserver://192.168.80.214:1433;databaseName=DB_Central;encrypt=false;sslProtocol=TLSv1.2;
只是:
url=jdbc:sqlserver://192.168.80.214:1433;databaseName=DB_Central
有效的JTDS(在tomcat 8.0.32 / JDBC 3.0环境中):
driverClassName=net.sourceforge.jtds.jdbc.Driver
url=jdbc:jtds:sqlserver://192.168.80.214:1433;databaseName=DB_Central
任何可能为我指明正确方向的事情都会有所帮助,尤其是为什么 MS 驱动程序希望(或认为)连接是安全的。另一个花絮是我在部署到 Windows 10 时没有看到这些错误……所以它与 Linux 以及 Linux 上的 Java 配置有关。或者,也许我在 Linux 中只需要正确的连接字符串咒语.....
【问题讨论】:
-
该错误表明服务器确实为 SSL(或:TLS)提供了带有 CN 'SSL_Self_Signed_Fallback' 的自签名证书,Java 不信任该证书。所以,也许你的 DBA 没有在 SQL Server 上配置 SSL,但它肯定是启用的。另见support.microsoft.com/en-us/help/2007728/…
标签: java sql-server linux ssl jdbc