无法使用 TLSv1.2 连接到 Amazon RDS

无法使用 TLSv1.2 连接到 Amazon RDS

我用 Ubuntu 20 设置了一台新机器,发现我无法再连接到我的 RDS 数据库。

原本应该连接到开发环境的 spring-boot 应用程序抛出了以下异常:
javax.net.ssl.SSLHandshakeException: No appropriate protocol (protocol is disabled or cipher suites are inappropriate)

所以我找到了 mySql workbench 并尝试使用它。结果出现了以下错误:
ssl_choose_client_version:unsupported protocol

查找后我发现,Ubuntu 20 将 TLSv1.2 设置为最低 TLS 版本,如果您的 MySQL 服务器不支持它,就会发生此错误(来自这里:https://askubuntu.com/questions/1193629/why-mysql-workbench-8-x-errors-out-with-an-ssl-connection-error-choose-client-v)。我尝试在关闭 SSL 的情况下使用 Workbench,果然可以建立连接。

显而易见的问题是,这是 Amazon RDS...TLS 1.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 设置为必需。Spring-Boot 仍然没有,我想我必须在其他地方配置它才能获取备忘录。但与其浪费时间,我宁愿解决真实的问题是,我无法通过 TLSv1.2 连接,而据我所知,我应该可以。这比降低我的安全性要好得多。我尝试更新数据库证书,以防这可能是问题所在,但管理控制台没有发现证书有问题,而且显然不会让我在不需要时更换它。所以我有点不知道下一步该尝试什么。

答案1

事实证明,TLS 支持取决于您在 RDS 上使用的确切数据库引擎版本。Aurora mySQL 5.6 仅支持 TLSv1.0,直到版本 1.23.1,此时 TLSv1.1 和 1.2 可用。我们的版本是 1.22.something,所以我不得不升级引擎。

即使这样但是它不起作用,因为 Ubuntu 20 还强制执行最小 dhe 密钥长度为 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 这会将您的 SECLEVEL 更改为 1,因此 openssl 将接受较短的 DHE 密钥。

即使这样我的 spring-boot 应用程序无法连接,但 Workbench 现在可以连接了。这是因为 JDBC 没有告诉服务器它可以执行 TLSv1.2尽管完全可以(这是一个奇怪的决定),因此即使服务器可以,它也永远不会尝试发送 1.2 握手。

为了告诉 JDBC 实际使用 TLSv1.2,您必须将其附加到连接字符串:

jdbc:myslq://<host>/<db>?enabledTLSProtocols=TLSv1.2

现在一切都联系在一起了。

我本来希望让 aurora 提供更长的密钥,而不是降低 Ubuntu 的安全性,但似乎没有办法。如果有人知道,请告诉我。

相关内容