关键词

Java8(291)之后禁用了TLS1.1使JDBC无法用SSL连接SqlServer2008的解决方法

问题描述:

在 Java8(291) 之后,默认禁用了 TLS1.1,这会导致使用 JDBC 连接 SQL Server 2008 时无法使用 SSL 进行连接。那么如何解决这个问题呢?

解决方法:

  1. 升级 SQL Server 版本

首先,可以考虑升级 SQL Server 到支持更高安全协议的版本。例如,SQL Server 2012 及以上版本默认支持 TLS1.2,因此可以尝试升级到 SQL Server 2012 或以上版本。如果实在无法升级,可以考虑采取下面的解决方法。

  1. 配置 JVM

可以通过配置 JVM 来允许 TLS1.1 协议。具体来说,需要在启动 JVM 时加上如下参数:

-Djdk.tls.client.protocols="TLSv1,TLSv1.1,TLSv1.2"

这个参数会启用 TLS1.1 和 TLS1.2 协议,并禁用 TLS1.0 协议。可以根据实际需求修改参数值。

另外,如果使用的是 OpenJDK,还需要添加以下参数:

-Djava.security.properties=${PATH_TO_OPENJDK}/conf/security/java.security

其中 ${PATH_TO_OPENJDK} 表示 OpenJDK 安装路径。

示例说明:

示例 1:Java 连接 SQL Server 2008 配置TLS1.1

假设我们的 Java 连接 SQL Server 2008 的代码如下:

Connection conn = DriverManager.getConnection("jdbc:sqlserver://localhost:1433;databaseName=TestDB;", "user", "password");

如果我们按照上面的第二种方法来解决问题,可以在启动 JVM 时加上如下参数:

java -Djdk.tls.client.protocols="TLSv1,TLSv1.1,TLSv1.2" MainClass

其中 MainClass 表示 Java 主类名称。

示例 2:使用 Tomcat 连接 SQL Server 2008 配置TLS1.1

如果我们使用 Tomcat 来连接 SQL Server 2008,可以在 catalina.shcatalina.bat(根据操作系统不同)中添加如下参数:

JAVA_OPTS="$JAVA_OPTS -Djdk.tls.client.protocols=TLSv1,TLSv1.1,TLSv1.2"

这样在启动 Tomcat 时就会加上上述参数来设置 TLS 协议。

总结:

通过上述两种方法,我们可以解决 JDBC 无法使用 SSL 连接 SQL Server 2008 的问题。但是需要注意的是,如果使用的是 OpenJDK,还需要添加更多的配置参数。同时需要考虑升级 SQL Server 版本来提高安全性。

本文链接:http://task.lmcjl.com/news/18846.html

展开阅读全文