【发布时间】:2016-09-20 12:18:09
【问题描述】:
我正在使用启用了 SSL 并根据these instructions 生成证书的 MySQL 5.7.10。我的 Java 7 应用程序使用 MariaDB Connector/J 并且在 JDBC URL 中启用了 SSL:
jdbc:mysql://dbservername:3306/dbname?useSSL=true&trustServerCertificate=false
但连接失败:
Caused by: java.lang.RuntimeException: Could not generate DH keypair
...
Caused by: java.security.InvalidAlgorithmParameterException: Prime size must be multiple of
64, and can only range from 512 to 1024 (inclusive)
根据this blog post,问题可以通过以下方式解决:
- 升级到 Java 8(或更高版本)。
- 降级到 MySQL 5.7.5(或更低版本)。
- 不包括 Diffie-Hellman (DH) 密码。
(1) 不是我正在从事的项目的一个选项。 (2) 似乎具有限制性,并且会阻止访问未来的 MySQL 改进。 (3) 似乎是最有前途的:我已经验证它确实适用于MySQL connector/J,但不幸的是它的 GPL 许可证阻止我在我的项目中使用它。
MariaDB Connector/J 是否具有与 enabledSSLCipherSuites 等效的属性,或者是否有任何其他方法可以防止它在连接时使用 DH 密码?
【问题讨论】:
-
而 MySQL Connector/J 在 com.mysql.jdbc.ExportControlled.transformSocketToSSLSocket(MysqlIO mysqlIO) 中调用
javax.net.ssl.SSLSocket.setEnabledCipherSuites(String[] suites),可悲的是 MariaDB Connector/J does not。 -
谢谢 - 非常准确!猜猜这是指向更新开源代码以包含此选项的选项...
-
...或提交错误报告并等待 MariaDB 团队完成!
标签: java mysql security ssl mariadb