无法通过 AWS 弹性负载均衡器与 MySQL 容器建立 SSL 加密连接

SSL encrypted connection to MySQL container not possible over AWS elastic load balancer

我正在尝试在 AWS VPC 上建立到我的 MySQL Docker 服务 运行 的 SSL 加密连接(由 Docker 为 AWS 设置云形成模板)。 elastic load balancer配置重定向3306端口,连接容器没有问题(例如使用MySQLWorkbench,mysql-client,..)只要SSL未开启(将 AWS 自己的证书(ACM)或我的自定义证书添加到 ELB 侦听器)。如果启用了 SSL,客户端将开始挂起/冻结,而不会返回正确的错误。我从 ACM 添加了 ca-certs,生成了我自己的证书(有和没有客户端的附加密钥/证书),但似乎没有解决我的问题。

现在我很清楚这个设置并不常见。我想这样做的标准方法是配置 MySQL-Server 本身。 AFAIK,在这种情况下,只有客户端和 ELB 之间的连接是加密的,但我不明白为什么这会导致问题?

非常感谢您的回答!

在MySQL的client/server协议中,服务器先对话。它宣传其功能(包括是否支持 SSL)。然后客户端请求连接切换到 SSL 模式。只有这样,SSL 协商才会发生。

因此,无法在 MySQL 前卸载 SSL。

您的连接挂起是因为客户端正在等待来自服务器的初始数据包,而 ELB 正在等待客户端开始协商 SSL——因为与 MySQL client/server 协议不同,客户首先讨论标准 SSL 协商。

你必须在 MySQL 服务器上有一个证书,而不是在 ELB 上,这样才能工作。

AWS 网络 负载均衡器是公开 MySQL 更合适的解决方案,但您仍然需要 MySQL 服务器本身的 SSL 证书。