MariaDB 中的 SSL 现状

通常当人们说“SSL”或“TLS”时,它指的不是一个特定的协议,而是一个 *协议族*。维基百科文章 有详细介绍,但简而言之,SSL 2.0 和 SSL 3.0 已被弃用,不应再使用(众所周知的 POODLE 漏洞利用了 SSL 3.0 中的缺陷)。TLS 1.0 已经有十六年历史了,虽然仍在被使用,但新的安全标准(例如 PCI DSS v3.1)要求使用 TLS 1.1 或更好的 TLS 1.2。

MySQL 自 2001 年起就支持 TLS 1.0。这意味着 MariaDB 从第一天起就支持它,并且从未支持较弱的 SSL 2.0 或 SSL 3.0。自 MariaDB 5.5.41(发布于 2014 年 12 月 21 日)和 MariaDB 10.0.15(2014 年 11 月 25 日)起,我们也支持 TLS 1.1 和 TLS 1.2。例如,您可以使用以下方式只选择 TLS 1.2 密码套件:

ssl-cipher=TLSv1.2

my.cnf 文件中。但这仅在 MariaDB 使用 OpenSSL 编译时有效——即在 MariaDB.org 存储库 中的所有 MariaDB 包中,但不包括二进制 tarball(它们使用 YaSSL 编译)。

请注意,如果您认真对待在 MariaDB 中使用 SSL,应在所有客户端中启用服务器证书验证。例如,使用:

[client]
ssl-verify-server-cert

没有它,您的连接很容易受到中间人攻击,任何有可能劫持连接的人都可以替换证书并读取所有加密数据,甚至完全禁用 SSL(这被称为 BACKRONYM 漏洞,其页面非常搞笑)。此选项从第一天起就存在于 MariaDB 中,但在 MariaDB 5.5.44(发布于 2015 年 6 月 11 日)和 MariaDB 10.0.20(2015 年 6 月 18 日)中进一步加强,以拒绝不支持 SSL 的服务器,并且在 MariaDB 5.5.47(发布于 2015 年 12 月 10 日)、MariaDB 10.0.23(发布于 2015 年 12 月 18 日)和 MariaDB 10.1.10(发布于 2015 年 12 月 24 日?)中修复了底层主机名验证中的一个错误。

保持安全!