文档首页
MySQL 9.0 参考手册
相关文档 下载本手册
PDF (US Ltr) - 40.0Mb
PDF (A4) - 40.1Mb
Man Pages (TGZ) - 258.2Kb
Man Pages (Zip) - 365.3Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


MySQL 9.0 参考手册  /  ...  /  使用 MySQL 创建 SSL 和 RSA 证书和密钥

8.3.3.1 使用 MySQL 创建 SSL 和 RSA 证书和密钥

如果缺少这些文件,MySQL 提供以下方法来创建支持使用 SSL 的加密连接以及通过未加密连接使用 RSA 进行安全密码交换所需的 SSL 证书和密钥文件以及 RSA 密钥对文件。

  • 对于 MySQL 发行版,服务器可以在启动时自动生成这些文件。

重要

服务器自动生成有助于降低使用 SSL 的门槛,因为它使生成所需文件变得更加容易。但是,通过这种方法生成的证书是自签名的,可能不太安全。在您积累了使用这些证书的经验后,请考虑从注册的证书颁发机构获取证书和密钥材料。

重要

如果连接到 MySQL 服务器实例的客户端使用具有 extendedKeyUsage 扩展名(X.509 v3 扩展名)的 SSL 证书,则扩展密钥用法必须包括客户端身份验证 (clientAuth)。如果 SSL 证书仅指定用于服务器身份验证 (serverAuth) 和其他非客户端证书用途,则证书验证失败,客户端连接到 MySQL 服务器实例也失败。MySQL 服务器生成的 SSL 证书中没有 extendedKeyUsage 扩展名。如果您使用以其他方式创建的自己的客户端证书,请确保任何 extendedKeyUsage 扩展名都包括客户端身份验证。

自动 SSL 和 RSA 文件生成

对于使用 OpenSSL 编译的 MySQL 发行版,MySQL 服务器具有在启动时自动生成缺少的 SSL 和 RSA 文件的功能。auto_generate_certssha256_password_auto_generate_rsa_keyscaching_sha2_password_auto_generate_rsa_keys 系统变量控制这些文件的自动生成。默认情况下,这些变量已启用。它们可以在启动时启用和检查,但不能在运行时设置。

在启动时,如果 auto_generate_certs 系统变量已启用,没有指定 SSL 选项,并且服务器端 SSL 文件在数据目录中丢失,服务器会自动在数据目录中生成服务器端和客户端 SSL 证书和密钥文件。这些文件启用使用 SSL 的加密客户端连接;请参阅 第 8.3.1 节,“配置 MySQL 以使用加密连接”

  1. 服务器检查数据目录中是否存在以下名称的 SSL 文件

    ca.pem
    server-cert.pem
    server-key.pem
  2. 如果存在任何这些文件,服务器将不会创建任何 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
  3. 如果服务器自动生成 SSL 文件,它将使用 ca.pemserver-cert.pemserver-key.pem 文件的名称来设置相应的系统变量 (ssl_cassl_certssl_key)。

在启动时,如果以下所有条件都为真,服务器将在数据目录中自动生成 RSA 私钥/公钥对文件:sha256_password_auto_generate_rsa_keyscaching_sha2_password_auto_generate_rsa_keys 系统变量已启用;未指定任何 RSA 选项;数据目录中缺少 RSA 文件。这些密钥对文件允许通过未加密连接使用 RSA 安全地交换密码,用于由 sha256_passwordcaching_sha2_password 插件进行身份验证的帐户;请参见 第 8.4.1.2 节“SHA-256 可插拔身份验证”第 8.4.1.1 节“缓存 SHA-2 可插拔身份验证”

  1. 服务器检查数据目录中是否存在以下名称的 RSA 文件

    private_key.pem      Private member of private/public key pair
    public_key.pem       Public member of private/public key pair
  2. 如果存在任何这些文件,服务器将不会创建任何 RSA 文件。否则,它将创建它们。

  3. 如果服务器自动生成 RSA 文件,它将使用其名称设置相应的系统变量(sha256_password_private_key_pathsha256_password_public_key_pathcaching_sha2_password_private_key_pathcaching_sha2_password_public_key_path)。

SSL 和 RSA 文件特征

服务器自动创建的 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 版本号。

    对于服务器生成的的文件,如果生成的 CN 值超过 64 个字符,则名称的 _suffix 部分将被省略。

  • SSL 文件的国家/地区 (C)、州或省份 (ST)、组织 (O)、组织单位名称 (OU) 和电子邮件地址的值为空。

  • 服务器创建的 SSL 文件从生成时间起有效期为十年。

  • RSA 文件不会过期。

  • SSL 文件的每个证书/密钥对都有不同的序列号(CA 为 1,服务器为 2,客户端为 3)。

  • 服务器自动创建的文件由运行服务器的帐户拥有。

  • 在 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 |
+-----------------------+--------------------------+