如何为运行在Ubuntu 18 LTS上的MySQL数据库配置域名绑定的SSL连接
MySQL绑定域名SSL配置指南(Ubuntu 18 LTS适用)
MySQL完全支持绑定域名的SSL配置,核心要求是服务端使用的SSL证书的通用名(CN)或使用者备用名称(SAN)字段包含你要绑定的数据库访问域名即可,以下是具体操作步骤:
前置准备
提前获取对应域名的SSL证书,可使用公开CA签发的证书,也可使用自签证书,需准备三个文件:
- 服务端证书文件(例:
server.crt),证书的CN/SAN必须填写你要绑定的MySQL域名,如mysql.yourdomain.com - 服务端私钥文件(例:
server.key) - CA根证书文件(自签证书为自签CA证书,公开CA证书为CA链文件,例:
ca.crt)
操作步骤
1. 上传证书并配置权限
将三个证书文件上传到Ubuntu服务器的指定目录,调整权限确保MySQL进程可读取:
sudo mkdir -p /etc/mysql/ssl # 将证书放到上述目录后执行权限修改 sudo chown mysql:mysql /etc/mysql/ssl/* sudo chmod 600 /etc/mysql/ssl/server.key sudo chmod 644 /etc/mysql/ssl/server.crt /etc/mysql/ssl/ca.crt
2. 修改MySQL配置文件
编辑MySQL主配置文件/etc/mysql/mysql.conf.d/mysqld.cnf,新增或修改以下配置项:
[mysqld] # 启用SSL配置 ssl_ca = /etc/mysql/ssl/ca.crt ssl_cert = /etc/mysql/ssl/server.crt ssl_key = /etc/mysql/ssl/server.key # 可选:强制所有连接必须使用SSL,按需开启 # require_secure_transport = ON # 按需配置监听地址,公网访问可设为0.0.0.0 bind-address = 0.0.0.0
保存后重启MySQL服务使配置生效:
sudo systemctl restart mysql
3. 验证服务端SSL状态
登录MySQL执行命令检查SSL是否成功启用:
SHOW VARIABLES LIKE '%ssl%';
返回结果中have_ssl的值为YES即代表服务端SSL配置生效。
4. 客户端域名连接测试
客户端连接时指定绑定的域名、CA证书,开启域名校验即可:
mysql -h mysql.yourdomain.com -u 你的数据库用户名 -p --ssl-ca=./ca.crt --ssl-mode=VERIFY_IDENTITY
其中--ssl-mode=VERIFY_IDENTITY参数会强制校验服务端证书的域名与访问域名是否匹配,可防范中间人攻击,是安全性最高的连接模式。
可选:配置用户强制域名SSL访问
如需指定某个用户必须通过域名SSL连接,可在MySQL中修改用户权限规则:
ALTER USER '你的用户名'@'%' REQUIRE SUBJECT '/CN=mysql.yourdomain.com'; -- 如需同时校验CA签发信息,可使用以下配置 -- ALTER USER '你的用户名'@'%' REQUIRE ISSUER '/CN=你的CA名称' SUBJECT '/CN=mysql.yourdomain.com'; FLUSH PRIVILEGES;
内容的提问来源于stack exchange,提问作者Olivia
相关产品推荐
相关产品推荐

