首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法使用来自CentOS 8服务器的MS驱动程序连接到Server服务器: SSL错误但未使用安全连接

无法使用来自CentOS 8服务器的MS驱动程序连接到Server服务器: SSL错误但未使用安全连接
EN

Stack Overflow用户
提问于 2020-06-25 19:01:18
回答 4查看 13.6K关注 0票数 4

我找到了一篇与我正在经历的问题很接近的文章。就是这个:

Java 8上的Server错误:驱动程序无法使用安全套接字层(SSL)加密建立到Server的安全连接

我可以提供整个堆栈跟踪,但是经过修剪的版本有以下一系列错误:

com.microsoft.sqlserver.jdbc.SQLServerException:驱动程序无法使用安全套接字层(SSL)加密建立到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连接指向未启用连接加密或我所知道的任何安全性的Server 2012。我和我们的DB的人谈过了,他说他所知道的连接没有安全。因此,我不知道为什么MS驱动程序继续抱怨SSL连接。

这个Linux服务器(CentOS 8)有两个使用JDBC连接的tomcat安装。我有一个Tomcat 8.0.32实例,它使用JTDS驱动程序连接到Server 2012实例,在连接上完全没有问题。我试着把那个驱动程序切换到MS驱动程序,然后它也遇到了同样的错误。所以我把它换回来了。但是Tomcat (9.0.33)的第二个安装程序需要一个JDBC4.0或更高版本的驱动程序,而JTDS驱动程序只是一个3.0驱动程序,所以我必须使用MS驱动程序。但是,我想不出怎样才能成功地建立一种联系。

通过互联网,我发现了对jsse.jar的引用,并安装了正确的证书(尽管没有具体说明如何去做,也没有具体的原因)。我还挖掘了一篇文章,其中说JTDS驱动程序使用NTLM进行连接(这不是100%确定的,因为我在JTDS的连接中没有引用域)。无论如何,我只需要一些关于如何配置MS驱动程序以从Linux连接到不安全的Server 2012的指导。我发现的Microsoft引用解决了安全连接,但没有涉及到不安全的连接。

运行Java版本:

  • openjdk版本"1.8.0_252“
  • OpenJDK运行时环境(Build1.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;

也曾尝试过:

代码语言:javascript
复制
url=jdbc:sqlserver://192.168.80.214:1433;databaseName=DB_Central;encrypt=false;sslProtocol=TLSv1.2;

只是:

代码语言:javascript
复制
url=jdbc:sqlserver://192.168.80.214:1433;databaseName=DB_Central

工作的JTDS (在tomcat 8.0.32 /JDBC3.0环境中):

代码语言:javascript
复制
driverClassName=net.sourceforge.jtds.jdbc.Driver
url=jdbc:jtds:sqlserver://192.168.80.214:1433;databaseName=DB_Central

任何可能指向正确方向的东西都会有帮助,特别是为什么MS驱动程序希望(或认为)连接是安全的。另一个好处是,当部署到Windows时,我没有看到这些错误,这与10...so有关,可能与Linux上的Java有关。或者,也许我只是需要正确的咒语连接字符串时,在Linux.

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2020-06-29 15:59:11

因此,经过多次尝试和错误之后,我能够让它工作的方法是将java.security文件从windows 10安装复制到CentOS 8安装。我认为这两者之间唯一不同的地方是在这一节:

以或等于此字符串开头的以逗号分隔的包的列表

时,将引发安全异常。

'#传递给checkPackageDefinition,除非

#对应的RuntimePermission (“defineClassInPackage.”+包)

#被批准了。

'#

'#默认情况下,JDK调用提供的类加载器中没有一个

'# checkPackageDefinition.

'#

在列表末尾包含的CentOS中的条目:

代码语言:javascript
复制
           org.GNOME.Accessibility.,\
           org.GNOME.Bonobo.

Windows版本中的条目在末尾只有一个条目:

代码语言:javascript
复制
           com.sun.java.accessibility.

这是我唯一能找到的区别。我不明白这有什么不同..。但它现在没有错误的连接,这就是我想要的.

票数 0
EN

Stack Overflow用户

发布于 2020-06-25 19:13:24

驱动程序认为,如果连接到只接收安全连接的端口,则该连接是安全的。1.检查端口2.检查JDBC url上TLS / SSL的任何其他显式设置

票数 1
EN

Stack Overflow用户

发布于 2020-08-06 09:24:38

花相当多的时间解决centos 8与tomcat和jdbc:sql server 2014之间的连接问题。我在sql server配置中替换了协议属性中的自签名证书.你在窗户上看不到它,这是一种误导。它只在tomcat catalina.out文件中可见--使用-Djavax.net.debug=ssl:handshake:all调试。您必须准备来自权威机构的证书(自签名也应该有效),并将其存储在windows服务器的本地计算机证书中。确保sql server的服务帐户有权访问证书的私钥。否则,sql服务将不会启动。重新启动sql服务器。

将证书和链添加到tomcat配置仙人掌文件中。将-Djavax.net.ssl.trustStore=-Djavax.net.ssl.trustStorePassword=添加到setenv.sh中

webapps中的字符串必须非常简单:其他选项不能工作,并导致进一步的异常: integratedSecurity=true;encrypt=true;trustServerCertificate=true - trustStore=storeName;trustStorePassword=storePassword和我尝试了所有布尔选项,即: false/true,重新启动tomcat。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62582542

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档