MySQL的安全性/.../ 使用MySQL创建SSL和RSA证书和密钥

5.3.1使用MySQL生成SSL和RSA证书和密钥

MySQL提供以下方法来创建SSL证书、密钥文件和RSA密钥对文件,以支持使用SSL加密连接,并在未加密连接上使用RSA进行安全密码交换,如果这些文件丢失的话:

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

  • 用户可以调用mysql_ssl_rsa_setup手动工具。

  • 对于某些发行类型,例如RPM和DEB包,mysql_ssl_rsa_setup调用发生在数据目录初始化期间。在这种情况下,MySQL发行版不需要使用OpenSSL编译,只要openssl命令可用。

重要的

服务器自动生成和mysql_ssl_rsa_setup帮助降低使用SSL的障碍,使其更容易生成所需的文件。然而,这些方法生成的证书是自签名的,这可能不是很安全。在获得使用这些文件的经验后,考虑从已注册的证书颁发机构获取证书/密钥材料。

自动SSL和RSA文件生成

对于使用OpenSSL编译的MySQL发行版,MySQL服务器能够在启动时自动生成丢失的SSL和RSA文件。的auto_generate_certssha256_password_auto_generate_rsa_keys,caching_sha2_password_auto_generate_rsa_keys系统变量控制这些文件的自动生成。这些变量在默认情况下是启用的。它们可以在启动时启用并检查,但不能在运行时设置。

在启动时,服务器自动在数据目录中生成服务器端和客户端SSL证书和密钥文件auto_generate_certs系统变量已启用,没有其他SSL选项——ssl,则数据目录中缺少服务器端SSL文件。这些文件支持使用SSL加密的客户端连接;看到第5.1节,“配置MySQL使用加密连接”

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

    ca.pem server-cert。pem server-key.pem
  2. 如果存在这些文件中的任何一个,服务器就不会创建SSL文件。否则,它会创建它们,外加一些额外的文件:

    CA .pem自签名CA证书CA -key。server-cert. pem CA私钥。Server -key. pem服务器证书。client-cert. pem服务端私钥。Client -key. pem客户端证书。pem客户端私钥
  3. 如果服务器自动生成SSL文件,它将使用ca.pemserver-cert.pem,server-key.pem文件设置相应的系统变量(ssl_cassl_certssl_key).

在启动时,如果满足以上所有条件,服务器会自动在data目录中生成RSA公私钥对文件sha256_password_auto_generate_rsa_keyscaching_sha2_password_auto_generate_rsa_keys系统变量已启用;没有指定RSA选项;数据目录中的RSA文件丢失了。这些密钥对文件支持使用RSA在未加密的连接上对通过认证的帐户进行安全的密码交换sha256_passwordcaching_sha2_password插件;看到第6.1.3节“SHA-256可插式认证”,第6.1.2节,“缓存SHA-2可插入认证”

  1. 服务器会检查data目录中是否有以下名称的RSA文件:

    private_key。私钥/公钥对public_key的私钥成员。pem私钥/公钥对的公共成员
  2. 如果存在这些文件中的任何一个,服务器就不会创建RSA文件。否则,它会创建它们。

  3. 如果服务器自动生成RSA文件,它使用它们的名称来设置相应的系统变量(sha256_password_private_key_pathsha256_password_public_key_path;caching_sha2_password_private_key_pathcaching_sha2_password_public_key_path).

使用mysql_ssl_rsa_setup手动生成SSL和RSA文件

MySQL发行版包括mysql_ssl_rsa_setup可以手动调用该实用程序来生成SSL和RSA文件。此实用程序包含在所有MySQL发行版中,但它要求openssl命令可用。有关使用说明,请参见mysql_ssl_rsa_setup创建SSL/RSA文件

SSL和RSA文件特征

由服务器或调用自动创建的SSL和RSA文件mysql_ssl_rsa_setup具备以下特点:

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

  • SSL CA证书为自签名证书。

  • 使用CA证书和密钥对SSL服务器和客户机证书进行签名sha256WithRSAEncryption签名算法。

  • SSL证书使用这些通用名称(CN)值,并使用相应的证书类型(CA、服务器、客户端):

    ca.pem: MySQL_Server_后缀_Auto_Generated_CA_Certificate server-cert。下午:MySQL_Server_后缀_Auto_Generated_Server_Certificate client-cert。下午:MySQL_Server_后缀_Auto_Generated_Client_Certificate

    后缀值基于MySQL版本号。生成的文件mysql_ssl_rsa_setup方法显式指定后缀——后缀选择。

    对于服务器生成的文件,如果生成的CN值超过64个字符_后缀省略了部分名称。

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

  • 服务器创建的SSL文件mysql_ssl_rsa_setup有效期为十年,从产生之日起算。

  • RSA文件不过期。

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

  • 由服务器自动创建的文件由运行服务器的帐户拥有。使用mysql_ssl_rsa_setup由调用该程序的用户拥有。可以在支持乔恩()系统调用,如果程序被调用——uid选项指定应该拥有这些文件的用户。

  • 在Unix和类Unix系统上,证书文件的文件访问模式是644(即世界可读),密钥文件的文件访问模式是600(即仅由运行服务器的帐户访问)。

要查看SSL证书的内容(例如,要检查证书有效的日期范围),请调用openssl直接:

Openssl x509 -text -in ca.pemopenssl x509 -text -in client-cert.pem . Pem

也可以使用下面的SQL语句检查SSL证书过期信息:

mysql> SHOW STATUS LIKE 'Ssl_server_not%';+-----------------------+--------------------------+ | Variable_name |值  | +-----------------------+--------------------------+ | Ssl_server_not_after |格林尼治时间2027年4月28日14:16:39 | | Ssl_server_not_before | 5月1日14:16:39 2017 GMT  | +-----------------------+--------------------------+