OpenJDK 11在JDBC连接字符串中使用TLS 1.2

问题描述

我的远程MysqL服务器仅接受通过TLS 1.2的连接。如何在JDBC(OpenJDK 11)中选择协议版本?

sql State: 28000
java.sql.sqlException: TLS version used does not meet minimal requirements
for this server. Please use a higher TLS version and retry.
<dependency>
  <groupId>MysqL</groupId>
  <artifactId>mysql-connector-java</artifactId>
  <version>8.0.21</version>
</dependency>

我尝试将enabledSslProtocolSuites添加到我的连接字符串中,但无济于事。

jdbc:MysqL://{server}.MysqL.database.azure.com:3306/{database_name}?
  serverTimezone=Australia/Melbourne&useSSL=true&requireSSL=true&enabledSslProtocolSuites=TLSv1.2

在启动-Djdk.tls.client.protocols="TLSv1.2" -Djavax.net.debug=all添加mvn exec:java显示尝试使用TLS 1.1 的Client Hello。

javax.net.ssl|DEBUG|0C|azureMysqLtest.App.main()|
2020-08-31 09:16:34.400 UTC|ClientHello.java:653|
Produced ClientHello handshake message (
"ClientHello": {
  "client version"      : "TLSv1.1","random"              : "0D 94 D2 90 A7 C0 ...","session id"          : "","cipher suites"       : ...

解决方法

您可以(显然)通过enabledTLSProtocols属性(8.0 reference)为mysql驱动程序(独立于Java供应商)选择TLS版本。

在您的情况下,值=TLSv1.2允许工作。抱歉,我找不到此属性(准确)值的引用,但我们可以进一步研究/获取受支持的ssl协议版本like here