当前位置: 首页 > 知识库问答 >
问题:

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

关志勇
2023-03-14

我的远程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>

我已经尝试将< code > enabledSslProtocolSuites 添加到我的连接字符串中,但是没有效果。

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

在启动 mvn exec:java 时添加 -Djdk.tls.client.protocols=“TLSv1.2” -Djavax.net.debug=all 会显示使用 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"       : ...

共有1个答案

孙海
2023-03-14

您可以(显然)通过启用的TLSProtocols属性(8.0参考)为mysql驱动程序(独立于java供应商)选择TLS版本:

  • 启用DTLSP协议

如果“useSSL”设置为“true”,则覆盖为在基础SSL套接字上使用而启用的TLS协议。这可用于限制与特定TLS版本的连接|自|版本8.0.8起|

在您的情况下,值 = TLSv1.2 批准工作。很抱歉,我找不到有关此属性的(确切)值的引用,但我们可以进一步调查/获取支持的ssl协议版本,如下所示。

 类似资料:
  • 我有一个来自ASP.NET的连接字符串,我必须在我的Java应用程序中使用它,然而,我似乎无法弄清楚它为什么不工作。 这是我得到的错误:cannot ;建立 ;连接 ;到 ;jdbc:sqlserver://localhost:1433;databaseName=mydatabase;“ 使用 ;com.microsoft.sqlserver.jdbc.sqlserverdriver ;( ;连接

  • 理想情况下,我希望使用实例id、项目名称、数据库名称、一个服务帐户电子邮件和一个p12文件的组合,但对其他身份验证选项是开放的。 编辑:在尝试策略时,我生成了这个日志文件,以备不时之需https://gist.github.com/aryeh-looker/e6b1b1617d301f0a247463216c96535d

  • 问题内容: 我认为这是不可能的,但我想我要是有办法的话。我的想法是,我有一个用于Web资源文件夹路径的变量: 我得到这个结果: 但是,我希望将字符串合并为一个字符串,如下所示: 是否可以在Less中将字符串连接在一起? 问题答案: 使用变量插值 完整代码:

  • 我目前正在使用以下连接字符串连接到数据库(数据库与ServerIP在同一台服务器上): 这在asp中使用时连接良好。网(我已经手动创建了dbUserId,并从sql server management studio为其分配了dbUserPassword。dbUserId是数据库“dbName”的所有者) 我在另一台电脑上有一个java swing应用程序,需要连接到同一个数据库。我正在使用sqlj

  • jdbc:sqlserver://localhost:1433;数据源=(本地);初始目录=MarketDataDB;用户id=andrew;密码=myPassode; 上面是我使用JDBC连接到SQL Server 2008 R2 Express数据库时使用的连接字符串,但产生了以下错误: 用户“”的登录失败 有什么想法吗? 我可以使用指定的用户名和密码从SQL Server Managemen

  • 本文向大家介绍如何在Python中用数字连接字符串?,包括了如何在Python中用数字连接字符串?的使用技巧和注意事项,需要的朋友参考一下 要用数字连接字符串,您需要使用str(number)将数字转换为字符串。例如, 在Python 2中,您还可以使用backtick(``)包围数字并使用数字和字符串获得相同的结果。请注意,反引号已从Python 3中删除。例如,