查看MySQL服务是否以--ssl选项启动,YES表示当前服务器支持SSL加密:
show variables like 'have_ssl%';
检查MySQL服务器require_secure_transport系统变量,如果是ON则说明服务器仅允许TLS/SSL加密的TCP/IP连接,一般我们OFF即可
show variables like 'require_secure_transport%';
检查证书和密钥文件相关的MySQL系统变量:
show variables like 'ssl%';
以下参数指定加密连接时使用的证书和密钥文件:
ssl_ca=ca.pem
ssl_cert=server-cert.pem
ssl_key=server-key.pem
MySQL8.0 在启动时会自动生成 SSL 证书、密钥文件,以及 RSA 密钥对文件;或者使用 mysql_ssl_rsa_setup 程序生成上述文件。
文件就存在数据目录中:
certs
├── ca-key.pem
├── ca.pem
├── client-cert.pem
├── client-key.pem
├── server-cert.pem
└── server-key.pem
手动创建CA证书(包含CA公钥)和CA私钥
openssl genrsa 2048 > ca-key.pem
openssl req -new -x509 -nodes -days 3600 \
-key ca-key.pem -out ca.pem
先生成服务器公钥、私钥
使用CA私钥对服务器公钥签名,得到服务器证书 server-cert.pem,证书中包含公钥、所有者、有效期等明文信息,也有经过 CA 私钥加密对公钥、所有者、有效期...加密后的签名
openssl req -newkey rsa:2048 -days 3600 \
-nodes -keyout server-key.pem -out server-req.pem
openssl rsa -in server-key.pem -out server-key.pem
openssl x509 -req -in server-req.pem -days 3600 \
-CA ca.pem -CAkey ca-key.pem -set_serial 01 -out server-cert.pem
先生成客户端公钥、私钥
使用CA私钥对客户端公钥签名,得到客户端证书 client-cert.pem,一般不需要验证客户端身份,这些文件就不需要用到。当然如果要同时验证 MySQL Server 身份和客户端身份,就需要用到这些文件了。
openssl req -newkey rsa:2048 -days 3600 \
-nodes -keyout client-key.pem -out client-req.pem
openssl rsa -in client-key.pem -out client-key.pem
openssl x509 -req -in client-req.pem -days 3600 \
-CA ca.pem -CAkey ca-key.pem -set_serial 01 -out client-cert.pem
查看证书内容
openssl x509 -text -in ca.pem
使用CA证书验证数字证书
openssl verify -CAfile ca.pem server-cert.pem
MySQL 客户端连接 Server 时,通过 --ssl-mode 参数指定:
- --ssl-mode=PREFFERED,默认行为,client 端尝试使用加密进行连接,如果无法构建加密连接,则会退回到未加密的连接
- --ssl-mode=REQUIRED时,Client 端需要加密连接,如果无法构建连接,则 Client 端将失败
- --ssl-mode=DISABLED,Client 端使用未加密的连接
- --ssl-mode=VERIFY_CA,Client 端需要加密连接,并且还对 CA 证书进行验证
- --ssl-mode=VERIFY_IDENTITY,Client 端需要加密的连接,并且还针对 CA 证书和其证书中的服务器主机名执行验证
注意:主机名身份验证 VERIFY_IDENTITY 不适用于由服务器自动创建或使用 mysql_ssl_rsa_setup 手动创建的自签名CA证书。
指定客户端密钥和证书路径
在[client]下添加如下代码:
ssl-ca = /data/3306/ca.pem
ssl-cert = /data/3306/client-cert.pem
ssl-key = /data/3306/client-key.pem
网友评论