我使用启用了SSL的MySQL 5.7.10,并根据these instructions生成证书。我的Java 7的应用程序使用MariaDB Connector/J和SSL在JDBC URL启用:如何使用MariaDB Connector/J建立与MySQL的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的连接器/ J调用['javax.net.ssl.SSLSocket.setEnabledCipherSuites(字符串[]套房)'](https://docs.oracle.com/javase/7/docs/api/javax/net/ssl/SSLSocket.html#setEnabledCipherSuites(java.lang.String []))in [com.mysql.jdbc .ExportControlled.transformSocketToSSLSocket(MysqlIO mysqlIO)](https://github.com/mysql/mysql-connector-j/blob/release/5.1/src/com/mysql/jdbc/ExportControlled.java#L146),可悲的是MariaDB连接器/ J [不](https://github.com/MariaDB/mariadb-connector-j/blob/master/src/main/java/org/mariadb/jdbc/internal/protocol/AbstractConnectProtocol.java#L43 1-L437)。 – eggyal
谢谢 - 非常好地指出!猜猜这是指向更新开源代码的选项,以包括... –
...或提交错误报告并等待MariaDB团队这样做! – eggyal