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

MySQL 提供了这些方法来创建 SSL 证书和密钥文件以及 RSA 密钥对文件，以支持使用 SSL 的加密连接和在未加密的连接上使用 RSA 进行安全密码交换（如果这些文件丢失）：

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

-   用户可以调用[**mysql_ssl_rsa\_设置**](mysql-ssl-rsa-setup.html)手动实用程序。

-   对于某些分发类型，例如 RPM 和 DEB 包，[**mysql_ssl_rsa\_设置**](mysql-ssl-rsa-setup.html)调用发生在数据目录初始化期间。在这种情况下，MySQL 发行版不需要使用 OpenSSL 编译，只要**openssl**命令可用。

重要的

服务器自动生成和[**mysql_ssl_rsa\_设置**](mysql-ssl-rsa-setup.html)通过更轻松地生成所需文件来帮助降低使用 SSL 的障碍。但是，这些方法生成的证书是自签名的，可能不是很安全。在您获得使用此类文件的经验后，请考虑从注册的证书颁发机构获取证书/密钥材料。

-   [自动生成 SSL 和 RSA 文件](creating-ssl-rsa-files-using-mysql.html#creating-ssl-rsa-files-using-mysql-automatic)

-   [使用 mysql 手动生成 SSL 和 RSA 文件\_ssl_rsa\_设置](creating-ssl-rsa-files-using-mysql.html#creating-ssl-rsa-files-using-mysql-manual-using-mysql-ssl-rsa-setup)

-   [SSL 和 RSA 文件特征](creating-ssl-rsa-files-using-mysql.html#creating-ssl-rsa-files-using-mysql-ssl-and-rsa-file-characteristics)

##### 自动生成 SSL 和 RSA 文件

对于使用 OpenSSL 编译的 MySQL 发行版，MySQL 服务器能够在启动时自动生成丢失的 SSL 和 RSA 文件。这[`自动生成证书`](server-system-variables.html#sysvar_auto_generate_certs),[`sha256_password_auto_generate_rsa_keys`](server-system-variables.html#sysvar_sha256_password_auto_generate_rsa_keys)， 和[`cache_sha2_password_auto_generate_rsa_keys`](server-system-variables.html#sysvar_caching_sha2_password_auto_generate_rsa_keys)系统变量控制这些文件的自动生成。默认情况下启用这些变量。它们可以在启动时启用和检查，但不能在运行时设置。

启动时，服务器会在数据目录中自动生成服务器端和客户端的 SSL 证书和密钥文件，如果[`自动生成证书`](server-system-variables.html#sysvar_auto_generate_certs)系统变量已启用，除 SSL 选项外没有其他 SSL 选项[`--ssl`](server-options.html#option_mysqld_ssl)已指定，并且数据目录中缺少服务器端 SSL 文件。这些文件启用使用 SSL 的加密客户端连接；看[第 6.3.1 节，“配置 MySQL 以使用加密连接”](using-encrypted-connections.html).

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 文件，它会使用`卡佩姆`,`服务器-cert.pem`， 和`服务器-key.pem`文件来设置相应的系统变量（[`ssl_ca`](server-system-variables.html#sysvar_ssl_ca),[`ssl_cert`](server-system-variables.html#sysvar_ssl_cert),[`ssl_key`](server-system-variables.html#sysvar_ssl_key)）。

    启动时，如果满足以下所有条件，服务器会自动在数据目录中生成 RSA 私钥/公钥对文件：[`sha256_password_auto_generate_rsa_keys`](server-system-variables.html#sysvar_sha256_password_auto_generate_rsa_keys)要么[`cache_sha2_password_auto_generate_rsa_keys`](server-system-variables.html#sysvar_caching_sha2_password_auto_generate_rsa_keys)系统变量已启用；没有指定 RSA 选项；数据目录中缺少 RSA 文件。这些密钥对文件支持使用 RSA 在未加密连接上为由`sha256_password`要么`cache_sha2_password`插入;看[第 6.4.1.3 节，“SHA-256 可插入身份验证”](sha256-pluggable-authentication.html)， 和[第 6.4.1.2 节，“缓存 SHA-2 可插入身份验证”](caching-sha2-pluggable-authentication.html).

4.  服务器检查具有以下名称的 RSA 文件的数据目录：

    ```
    private_key.pem      Private member of private/public key pair
    public_key.pem       Public member of private/public key pair
    ```

5.  如果存在这些文件中的任何一个，则服务器不会创建 RSA 文件。否则，它会创建它们。

6.  如果服务器自动生成 RSA 文件，它会使用它们的名称来设置相应的系统变量 ([`sha256_password_private_key_path`](server-system-variables.html#sysvar_sha256_password_private_key_path)和[`sha256_password_public_key_path`](server-system-variables.html#sysvar_sha256_password_public_key_path);[`cache_sha2_password_private_key_path`](server-system-variables.html#sysvar_caching_sha2_password_private_key_path)和[`cache_sha2_password_public_key_path`](server-system-variables.html#sysvar_caching_sha2_password_public_key_path)）。

##### 使用 mysql 手动生成 SSL 和 RSA 文件\_ssl_rsa\_设置

MySQL 发行版包括一个[**mysql_ssl_rsa\_设置**](mysql-ssl-rsa-setup.html)可以手动调用以生成 SSL 和 RSA 文件的实用程序。此实用程序包含在所有 MySQL 发行版中，但它确实需要**openssl**命令可用。有关使用说明，请参阅[第 4.4.3 节，“mysql_ssl_rsa_setup — 创建 SSL/RSA 文件”](mysql-ssl-rsa-setup.html).

##### SSL 和 RSA 文件特征

由服务器或通过调用自动创建的 SSL 和 RSA 文件[**mysql_ssl_rsa\_设置**](mysql-ssl-rsa-setup.html)有这些特点：

-   SSL 和 RSA 密钥的大小为 2048 位。

-   SSL CA 证书是自签名的。

-   SSL 服务器和客户端证书使用 CA 证书和密钥进行签名，使用`sha256带RSA加密`签名算法。

-   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
    ```

    这*`后缀`*值基于 MySQL 版本号。对于生成的文件[**mysql_ssl_rsa\_设置**](mysql-ssl-rsa-setup.html)，后缀可以使用显式指定[`- 后缀`](mysql-ssl-rsa-setup.html#option_mysql_ssl_rsa_setup_suffix)选项。

    对于服务器生成的文件，如果生成的 CN 值超过 64 个字符，则`_*`后缀`*`名称的一部分被省略。

-   SSL 文件的国家 (C)、州或省 (ST)、组织 (O)、组织单位名称 (OU) 和电子邮件地址具有空白值。

-   由服务器或由服务器创建的 SSL 文件[**mysql_ssl_rsa\_设置**](mysql-ssl-rsa-setup.html)自产生之日起十年内有效。

-   RSA 文件不会过期。

-   每个证书/密钥对的 SSL 文件具有不同的序列号（1 个用于 CA，2 个用于服务器，3 个用于客户端）。

-   服务器自动创建的文件归运行服务器的帐户所有。使用创建的文件[**mysql_ssl_rsa\_设置**](mysql-ssl-rsa-setup.html)由调用该程序的用户所有。这可以在支持`chown()`如果程序被调用，则系统调用`根`和[`--uid`](mysql-ssl-rsa-setup.html#option_mysql_ssl_rsa_setup_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 |
+-----------------------+--------------------------+
```
