2016-05-23 94 views
1

我使用启用了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,问题可能被解决

  1. 升级到Java 8(或更高版本)。
  2. 降级到MySQL 5.7.5(或更低版本)。
  3. 不包括Diffie-Hellman(DH)密码。

(1)不是我正在进行的项目的一个选项。 (2)似乎是限制性的,会阻止访问未来的MySQL改进。 (3)似乎是最有希望的:我已验证它可以与MySQL connector/J一起使用,但不幸的是,它的GPL许可证使我无法在我的项目中使用它。

MariaDB Connector/J是否具有与enabledSSLCipherSuites相同的属性,或者有什么其他方法可以防止连接时使用DH密码?

+1

而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

+0

谢谢 - 非常好地指出!猜猜这是指向更新开源代码的选项,以包括... –

+1

...或提交错误报告并等待MariaDB团队这样做! – eggyal

回答

1

请求的功能选项现已在MariaDB的连接器来实​​现/ J 1.5.0版本-RC:

enabledSslProtocolSuites强制TLS/SSL协议的一组特定的 TLS版本(逗号分隔的列表)。示例:“TLSv1,TLSv1.1, TLSv1.2”默认值:TLSv1,TLSv1.1。由于1.5.0

enabledSslCipherSuites强制TLS/SSL密码(以逗号分隔的列表)。 示例:“TLS_DHE_RSA_WITH_AES_256_GCM_SHA384, TLS_DHE_DSS_WITH_AES_256_GCM_SHA384”默认值:使用JRE密码。由于 1.5.0

(见注释的问题下面,release notesthis Jira ticket