我用Ubuntu 20安装了一台新机器,发现我再也无法连接到我的RDS数据库了。
本应连接到开发环境的spring-boot应用程序引发以下异常:
javax.net.ssl.SSLHandshakeException: No appropriate protocol (protocol is disabled or cipher suites are inappropriate)
因此,我挖出了mySql工作台并尝试使用它。导致此错误:
ssl_choose_client_version:unsupported protocol
要了解这一点,我就知道Ubuntu 20将TLSv1.2设置为最小的TLS版本,如果您的MySQL服务器不支持TLS版本,就会发生此错误(从这里开始:https://askubuntu.com/questions/1193629/why-mysql-workbench-8-x-errors-out-with-an-ssl-connection-error-choose-client-v)。我尝试了关闭SSL的工作台,并且确定它可以建立连接。
明显的问题是,这是亚马逊的RDS.TLS1.2是唯一不能禁用的版本,因为它是内部使用的版本,如这里所指出的:https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/SQLServer.Ciphers.html
所以说,这不应该有什么问题。我开始怀疑TLS版本是否真的是问题所在。但是,由于我没有任何其他线索,我按照这里的答案中的食谱重新配置我的本地openssl以允许最小的TLS版本1并降低安全性级别:https://askubuntu.com/questions/1233186/ubuntu-20-04-how-to-set-lower-ssl-security-level
您不知道吗,Workbench现在将SSL连接到required。Spring-Boot仍然没有,我想我必须在其他地方配置它才能得到备忘。但是我不想在这上面浪费时间,我宁愿解决真正的问题,那就是我不能通过TLSv1.2连接,尽管我可以告诉你,我真的应该能够连接。这比降低我的安全级别要好得多。我试图更新数据库证书,以防出现问题,但是管理控制台没有发现证书有什么问题,而且如果不需要,显然不会让我替换它。所以我有点想不出下一步该尝试什么了。
发布于 2021-08-04 06:53:13
事实证明,TLS支持取决于您在RDS上使用的确切的数据库引擎版本。Aurora mySQL 5.6只支持TLSv1.0,直到1.23.1版本才开始使用TLSv1.1和1.2。我们的版本是1.22左右,所以我不得不升级引擎。
即使如此,它也无法工作,因为Ubuntu 20还强制执行2048位的最小键长度,Aurora mysql 5.6无法提供,而且我可以告诉您,这是不能更改的。您将找到数据库参数的文档,这些参数可用于更改Diffie-Hellman密钥长度,但事实证明,这些参数仅适用于SqlServer,而不是MySQL。因此,您仍然必须对您的openssl.cnf应用更改,如这里所接受的答案所述:https://askubuntu.com/questions/1233186/ubuntu-20-04-how-to-set-lower-ssl-security-level THis将您的SECLEVEL更改为1,因此openssl将接受较短的DHE-键。
即使那样,我的春季引导应用程序也不会连接,尽管工作台现在已经连接了。这是因为JDBC没有告诉服务器它可以执行TLSv1.2,尽管它完全可以(奇怪的决定,这),所以即使可以,服务器也不会尝试发送1.2握手。
为了告诉JDBC实际使用TLSv1.2,必须将其附加到连接字符串中:
jdbc:myslq://<host>/<db>?enabledTLSProtocols=TLSv1.2
现在一切都连接起来了。
我本想让极光提供一个更长的钥匙,而不是降低Ubuntu的安全性,但似乎没有办法。如果有人知道,请告诉我。
https://serverfault.com/questions/1073493
复制