可以使用 OpenSSL 或 yaSSL 编译 MySQL,两者都启用基于 OpenSSL API 的加密连接:
MySQL Enterprise Edition 二进制发行版是使用 OpenSSL 编译的。无法将 yaSSL 与 MySQL 企业版一起使用。
MySQL Community Edition 二进制发行版是使用 yaSSL 编译的。
可以使用 OpenSSL 或 yaSSL 编译 MySQL Community Edition 源代码分发(请参阅 第 2.9.6 节,“配置 SSL 库支持”)。
仅在 MySQL 5.7.28 之前,可以使用 yaSSL 作为 OpenSSL 的替代方案来编译 MySQL。从 MySQL 5.7.28 开始,删除了对 yaSSL 的支持,所有 MySQL 构建都使用 OpenSSL。
OpenSSL 和 yaSSL 提供相同的基本功能,但使用 OpenSSL 编译的 MySQL 发行版具有额外的功能:
OpenSSL 支持 TLSv1、TLSv1.1 和 TLSv1.2 协议。yaSSL 仅支持 TLSv1 和 TLSv1.1 协议。
OpenSSL 支持更灵活的语法来指定密码(用于
ssl_cipher
系统变量和--ssl-cipher
客户端选项),并支持范围更广的加密密码可供选择。请参阅 加密连接的命令选项和 第 6.3.2 节“加密连接 TLS 协议和密码”。OpenSSL 支持
ssl_capath
系统变量和--ssl-capath
客户端选项。使用 yaSSL 编译的 MySQL 发行版不这样做,因为 yaSSL 不查找任何目录并且不遵循链式证书树。yaSSL 要求 CA 证书树的所有组件都包含在单个 CA 证书树中,并且文件中的每个证书都具有唯一的 SubjectName 值。要解决此限制,请将构成证书树的各个证书文件连接到一个新文件中,并将该文件指定为ssl_ca
系统变量和--ssl-ca
选项的值。OpenSSL 支持证书吊销列表功能(用于系统变量
ssl_crl
和 客户端 选项)。使用 yaSSL 编译的分发版不会,因为吊销列表不适用于 yaSSL。(yaSSL 接受这些选项但默默地忽略它们。)ssl_crlpath
--ssl-crl
--ssl-crlpath
使用该插件进行身份验证的帐户
sha256_password
可以使用 RSA 密钥文件通过未加密的连接进行安全密码交换。请参阅 第 6.4.1.5 节,“SHA-256 可插入身份验证”。服务器可以在启动时自动生成丢失的 SSL 和 RSA 证书和密钥文件。请参阅 第 6.3.3.1 节,“使用 MySQL 创建 SSL 和 RSA 证书和密钥”。
OpenSSL 支持
AES_ENCRYPT()
和AES_DECRYPT()
函数的更多加密模式。见 第 12.14 节,“加密和压缩函数”
仅当使用 OpenSSL 编译 MySQL 时,某些与 OpenSSL 相关的系统和状态变量才会存在:
要确定服务器是否使用 OpenSSL 编译,请测试任何这些变量是否存在。例如,如果使用 OpenSSL,则此语句返回一行,如果使用 yaSSL,则返回空结果:
SHOW STATUS LIKE 'Rsa_public_key';