MySQL提供以下方法来创建SSL证书、密钥文件和RSA密钥对文件,以支持使用SSL加密连接,并在未加密连接上使用RSA进行安全密码交换,如果这些文件丢失的话:
服务器可以在启动时自动生成这些文件,用于MySQL发行版。
用户可以调用mysql_ssl_rsa_setup手动工具。
对于某些发行类型,例如RPM和DEB包,mysql_ssl_rsa_setup调用发生在数据目录初始化期间。在这种情况下,MySQL发行版不需要使用OpenSSL编译,只要openssl命令可用。
服务器自动生成和mysql_ssl_rsa_setup帮助降低使用SSL的障碍,使其更容易生成所需的文件。然而,这些方法生成的证书是自签名的,这可能不是很安全。在获得使用这些文件的经验后,考虑从已注册的证书颁发机构获取证书/密钥材料。
对于使用OpenSSL编译的MySQL发行版,MySQL服务器能够在启动时自动生成丢失的SSL和RSA文件。的auto_generate_certs
,sha256_password_auto_generate_rsa_keys
,caching_sha2_password_auto_generate_rsa_keys
系统变量控制这些文件的自动生成。这些变量在默认情况下是启用的。它们可以在启动时启用并检查,但不能在运行时设置。
在启动时,服务器自动在数据目录中生成服务器端和客户端SSL证书和密钥文件auto_generate_certs
系统变量已启用,没有其他SSL选项——ssl
,则数据目录中缺少服务器端SSL文件。这些文件支持使用SSL加密的客户端连接;看到第5.1节,“配置MySQL使用加密连接”.
服务器会检查data目录中是否存在以下名称的SSL文件:
ca.pem server-cert。pem server-key.pem
如果存在这些文件中的任何一个,服务器就不会创建SSL文件。否则,它会创建它们,外加一些额外的文件:
CA .pem自签名CA证书CA -key。server-cert. pem CA私钥。Server -key. pem服务器证书。client-cert. pem服务端私钥。Client -key. pem客户端证书。pem客户端私钥
如果服务器自动生成SSL文件,它将使用
ca.pem
,server-cert.pem
,server-key.pem
文件设置相应的系统变量(ssl_ca
,ssl_cert
,ssl_key
).
在启动时,如果满足以上所有条件,服务器会自动在data目录中生成RSA公私钥对文件sha256_password_auto_generate_rsa_keys
或caching_sha2_password_auto_generate_rsa_keys
系统变量已启用;没有指定RSA选项;数据目录中的RSA文件丢失了。这些密钥对文件支持使用RSA在未加密的连接上对通过认证的帐户进行安全的密码交换sha256_password
或caching_sha2_password
插件;看到第6.1.3节“SHA-256可插式认证”,第6.1.2节,“缓存SHA-2可插入认证”.
服务器会检查data目录中是否有以下名称的RSA文件:
private_key。私钥/公钥对public_key的私钥成员。pem私钥/公钥对的公共成员
如果存在这些文件中的任何一个,服务器就不会创建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发行版包括mysql_ssl_rsa_setup可以手动调用该实用程序来生成SSL和RSA文件。此实用程序包含在所有MySQL发行版中,但它要求openssl命令可用。有关使用说明,请参见mysql_ssl_rsa_setup创建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 | +-----------------------+--------------------------+