c语言编程笔录

首页 >   > 笔记大全

笔记大全

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 进行安全连接。