MySQL 提供这些方法来创建 SSL 证书和密钥文件以及 RSA 密钥对文件,以支持使用 SSL 的加密连接和使用 RSA 通过未加密连接的安全密码交换,如果这些文件丢失:
- 服务器可以在启动时自动生成这些文件,用于 MySQL 发行版。
- 用户可以 手动调用mysql_ssl_rsa_setup实用程序。
- 对于某些分发类型,例如 RPM 和 DEB 包, 在数据目录初始化期间会发生mysql_ssl_rsa_setup调用。在这种情况下,只要openssl命令可用,就不需要使用 OpenSSL 编译 MySQL 发行版。
重要的
服务器自动生成和 mysql_ssl_rsa_setup使生成所需文件变得更容易,从而帮助降低使用 SSL 的障碍。但是,这些方法生成的证书是自签名的,可能不是很安全。在获得使用此类文件的经验后,请考虑从注册的证书颁发机构获取证书/密钥材料。
自动 SSL 和 RSA 文件生成
对于使用 OpenSSL 编译的 MySQL 发行版,MySQL 服务器能够在启动时自动生成丢失的 SSL 和 RSA 文件。的 auto_generate_certs, sha256_password_auto_generate_rsa_keys和 caching_sha2_password_auto_generate_rsa_keys 系统变量控制自动生成这些文件。默认情况下启用这些变量。它们可以在启动时启用和检查,但不能在运行时设置。
启动时,如果auto_generate_certs启用了系统变量,没有--ssl指定其他 SSL 选项 ,并且数据中缺少服务器端 SSL 文件,则服务器会在数据目录中自动生成服务器端和客户端 SSL 证书和密钥文件 目录。这些文件启用使用 SSL 的加密客户端连接;请参阅 第 6.3.1 节,“配置 MySQL 以使用加密连接”。
-
服务器检查数据目录中是否有以下名称的 SSL 文件:
ca.pem server-cert.pem server-key.pem -
如果存在这些文件中的任何一个,则服务器不会创建 SSL 文件。否则,它会创建它们,以及一些额外的文件:
ca.pem Self-signed CA certificate ca-key.pem CA private key server-cert.pem Server certificate server-key.pem Server private key client-cert.pem Client certificate client-key.pem Client private key -
如果服务器自动生成SSL文件,它使用的名称
ca.pem,server-cert.pem以及server-key.pem文件设置相应的系统变量(ssl_ca,ssl_cert,ssl_key)。
启动时,如果所有这些条件都为真,服务器会自动在数据目录中生成 RSA 私钥/公钥对文件: sha256_password_auto_generate_rsa_keys 或 caching_sha2_password_auto_generate_rsa_keys 系统变量已启用;未指定 RSA 选项;数据目录中缺少 RSA 文件。这些密钥对文件可以使用 RSA 通过未加密连接为由sha256_password或 caching_sha2_password插件验证的帐户启用安全密码交换 ;请参阅 第 6.4.1.3 节,“SHA-256 可插入身份验证”和 第 6.4.1.2 节,“缓存 SHA-2 可插入身份验证”。
-
服务器检查具有以下名称的 RSA 文件的数据目录:
private_key.pem Private member of private/public key pair public_key.pem Public member of private/public key pair -
如果存在这些文件中的任何一个,则服务器不会创建 RSA 文件。否则,它会创建它们。
-
如果服务器自动生成 RSA 文件,它会使用它们的名称来设置相应的系统变量(
sha256_password_private_key_path和sha256_password_public_key_path;caching_sha2_password_private_key_path和caching_sha2_password_public_key_path)。
使用 mysql_ssl_rsa_setup 手动生成 SSL 和 RSA 文件
MySQL 发行版包括一个 mysql_ssl_rsa_setup实用程序,可以手动调用它来生成 SSL 和 RSA 文件。此实用程序包含在所有 MySQL 发行版中,但它确实需要openssl命令可用。有关使用说明,请参阅第 4.4.3 节,“mysql_ssl_rsa_setup — 创建 SSL/RSA 文件”。
SSL 和 RSA 文件特征
由服务器或通过调用mysql_ssl_rsa_setup自动创建的 SSL 和 RSA 文件具有以下特征:
-
SSL 和 RSA 密钥的大小为 2048 位。
-
SSL CA 证书是自签名的。
-
SSL 服务器和客户端证书使用 CA 证书和密钥,使用
sha256WithRSAEncryption签名算法进行 签名。 -
SSL 证书使用这些通用名称 (CN) 值,以及适当的证书类型(CA、服务器、客户端):
ca.pem: MySQL_Server_suffix_Auto_Generated_CA_Certificate server-cert.pm: MySQL_Server_suffix_Auto_Generated_Server_Certificate client-cert.pm: MySQL_Server_suffix_Auto_Generated_Client_Certificate该*
suffix*值基于 MySQL 版本号。对于mysql_ssl_rsa_setup生成的文件 ,可以使用该--suffix选项显式指定后缀 。对于服务器生成的文件,如果生成的 CN 值超过 64 个字符, 则省略名称部分。
_*suffix* -
SSL 文件对于国家 ©、州或省 (ST)、组织 (O)、组织单位名称 (OU) 和电子邮件地址具有空白值。
-
服务器或mysql_ssl_rsa_setup创建的SSL 文件 自生成之时起有效期为十年。
-
RSA 文件不会过期。
-
SSL 文件的每个证书/密钥对都有不同的序列号(CA 为 1,服务器为 2,客户端为 3)。
-
服务器自动创建的文件归运行服务器的帐户所有。使用mysql_ssl_rsa_setup创建的文件 归调用该程序的用户所有。
chown()如果程序被调用root并提供--uid选项来指定应该拥有文件的用户,则可以在支持系统调用的系统上更改此设置。 -
在 Unix 和类 Unix 系统上,证书文件的文件访问模式为 644(即全球可读),密钥文件的文件访问模式为 600(即只能由运行服务器的帐户访问)。
要查看 SSL 证书的内容(例如,检查其有效的日期范围),请直接调用 openssl:
openssl x509 -text -in ca.pem
openssl x509 -text -in server-cert.pem
openssl x509 -text -in client-cert.pem
还可以使用以下 SQL 语句检查 SSL 证书到期信息:
mysql> SHOW STATUS LIKE 'Ssl_server_not%';
+-----------------------+--------------------------+
| Variable_name | Value |
+-----------------------+--------------------------+
| Ssl_server_not_after | Apr 28 14:16:39 2027 GMT |
| Ssl_server_not_before | May 1 14:16:39 2017 GMT |
+-----------------------+--------------------------+




