Documentation Home
MySQL 8.4 Reference Manual
Related Documentation Download this Manual
PDF (US Ltr) - 39.8Mb
PDF (A4) - 39.9Mb
Man Pages (TGZ) - 257.9Kb
Man Pages (Zip) - 364.9Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


MySQL 8.4 Reference Manual  /  ...  /  Creating SSL and RSA Certificates and Keys using MySQL

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

MySQL 提供了以下方式来创建使用 SSL 加密连接和安全密码交换的 SSL 证书和密钥文件和 RSA 密钥对文件,如果这些文件丢失:

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

Important

服务器自动生成有助于降低使用 SSL 的障碍,但自动生成的证书可能不太安全。使用这些方法后,您考虑从注册证书权威机构获取证书和密钥材料。

Important

如果客户端连接到 MySQL 服务器实例使用带有 extendedKeyUsage 扩展(X.509 v3 扩展)的 SSL 证书,扩展的密钥用途必须包括客户身份验证 (clientAuth)。如果 SSL 证书只用于服务器身份验证 (serverAuth) 和其他非客户证书用途,证书验证失败,客户端连接到 MySQL 服务器实例失败。MySQL 服务器生成的 SSL 证书中没有 extendedKeyUsage 扩展。如果您使用自己创建的客户证书,确保扩展中的密钥用途包括客户身份验证。

使用 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.3节,“SHA-256可插拔身份验证”第8.4.1.2节,“Caching 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密钥大小为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

    对于由服务器生成的文件,如果结果CN值超过64个字符,名称中的《suffix

  • SSL 文件的 Country (C)、State or Province (ST)、Organization (O) 和 Organization Unit Name (OU)、email 地址都为空。

  • 服务器生成的 SSL 文件有效期为十年,从生成时间开始计算。

  • RSA 文件不失效。

  • SSL 文件每对证书/密钥对有不同的序列号(CA 为 1、Server 为 2、Client 为 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 |
+-----------------------+--------------------------+