问题描述
我的远程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。