Java8(291)之后禁用了TLS1.1使JDBC无法用SSL连接SqlServer2008怎么解决
更新时间:2023-10-05问题背景:
Java 8 版本后,禁用了 TLS 1.1 协议,这导致使用 SSL 连接 SqlServer 2008 的 JDBC 驱动不能正常工作。这是因为 SqlServer 2008 默认只支持 TLS 1.0 和 TLS 1.1,不支持更高级的协议版本 TLS 1.2。
解决方法:
为了解决这个问题,我们需要进行一些配置和修改:
1. 更新 JDBC 驱动:
首先,我们需要下载并使用最新版本的 JDBC 驱动。注意,新版本的驱动应该支持 TLS 1.2 以上的协议版本。你可以到官方网站或者 Maven 仓库下载最新版本的驱动。
<dependency> <groupId>com.microsoft.sqlserver</groupId> <artifactId>mssql-jdbc</artifactId> <version>8.4.1.jre11</version> </dependency>
2. 启用 TLS 1.2:
在程序初始化的时候,我们需要启用 TLS 1.2 协议。可以通过以下方式设置:
System.setProperty("https.protocols", "TLSv1.2");
3. 增加 SSL 类库支持:
Java 默认使用 JSSE(Java Secure Socket Extension)作为 SSL 实现。然而,JSSE 不支持 TLS 1.2。我们可以选择其他的 SSL 类库,例如 BouncyCastle 来进行 SSL 连接:
Security.addProvider(new BouncyCastleProvider());
4. 配置加密套件:
某些情况下,需要显式指定支持的加密套件。可以通过以下代码配置:
System.setProperty("jdk.tls.client.protocols", "TLSv1.2"); System.setProperty("jdk.tls.enabledCipherSuites", "TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384");
总结:
通过更新 JDBC 驱动、启用 TLS 1.2、增加 SSL 类库支持和配置加密套件,我们可以解决 Java 8 之后 TLS 1.1 禁用导致 JDBC 无法使用 SSL 连接 SqlServer 2008 的问题。这些步骤确保了程序能够使用 TLS 1.2 协议与 SqlServer 2008 进行安全连接。