我们有一个连接到 MySQL 服务器的 PHP 应用程序,我们希望保护 Web 和应用程序服务器与数据库之间的连接。
在高峰时段,Web 服务器会同时与数据库建立数百个连接,并执行大量小型读写操作。我知道这不是最佳选择,因此正在努力减少并行的数据库连接数量。
我们当前没有打开与数据库的持久连接,尽管我们打算在未来这样做,但我希望独立于此实现这一点。
硬件方面 - MySQL 服务器非常笨重(16 核),Web 服务器也是如此。它们是专用服务器。
我的问题围绕着保护和加密数据库服务器连接的最有效方法。
到目前为止,我的研究表明,主要的性能开销在于设置 SSL 连接 - 一旦 SSL 连接,性能损失就很小。以下是我对每种保护连接的方法的看法:
- MySQL SSL 证书 - 工作原理与普通 SSL 相同。可以使用客户端证书来防止未经授权的连接。与我们现有的设置没有持久连接。仍然必须让 MySQL 在防火墙上的开放端口上进行监听。
- stunnel。设置端口到端口的 SSL 隧道。不必重新配置 MySQL。可以关闭正常的 MySQL 监听端口,以防止恶意的 MySQL 连接尝试。不支持持久连接。未知的性能影响。
- SSH 隧道。在客户端和服务器之间创建 SSH 隧道。无需重新配置 MySQL。可以关闭正常的 MySQL 监听端口,以防止恶意的 MySQL 连接尝试。支持持久连接,但有时会断开。未知的性能影响。
这是我所能得到的。我知道基准测试的局限性——根据我运行它们的经验,很难模拟真实世界的流量。我希望有人能根据他们自己保护 MySQL 的经验提出一些建议?
谢谢
答案1
我会使用 ssh-tunnel 并使用autossh
而不是ssh
。关于性能,我想说的是,SSH 协议是高度可定制的,如果需要,您可以微调您的连接。
但我不希望在建立连接后出现明显的开销。
答案2
通过查看这个基准文章(MySQL 性能博客),您确实应该避免使用 MySQL 的本机 SSL 功能。