问题描述:
在 Java8(291) 之后,默认禁用了 TLS1.1,这会导致使用 JDBC 连接 SQL Server 2008 时无法使用 SSL 进行连接。那么如何解决这个问题呢?
解决方法:
- 升级 SQL Server 版本
首先,可以考虑升级 SQL Server 到支持更高安全协议的版本。例如,SQL Server 2012 及以上版本默认支持 TLS1.2,因此可以尝试升级到 SQL Server 2012 或以上版本。如果实在无法升级,可以考虑采取下面的解决方法。
- 配置 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.sh
或 catalina.bat
(根据操作系统不同)中添加如下参数:
JAVA_OPTS="$JAVA_OPTS -Djdk.tls.client.protocols=TLSv1,TLSv1.1,TLSv1.2"
这样在启动 Tomcat 时就会加上上述参数来设置 TLS 协议。
总结:
通过上述两种方法,我们可以解决 JDBC 无法使用 SSL 连接 SQL Server 2008 的问题。但是需要注意的是,如果使用的是 OpenJDK,还需要添加更多的配置参数。同时需要考虑升级 SQL Server 版本来提高安全性。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java8(291)之后禁用了TLS1.1使JDBC无法用SSL连接SqlServer2008的解决方法 - Python技术站