MySQL配置SSL连接

7天前 15.5k 0

查看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

相关文章

最新发布!MySQL 9.0 的向量 (VECTOR) 类型文档更新
国产数据库中级认证HCIP-openGauss经验分享
保障数据完整性与稳定性:数据库一致性
OceanBase 里的 DDL 超时时间
OceanBase v3.1.x 将不再更新版本 | 社区月报2024.6
openGauss Developer Day 2024 | SIG组工作会议亮点回看!

发布评论