2026/5/21 18:28:57
网站建设
项目流程
做外贸学英语的网站,微信app下载安装官方版2020,2022有创意的广告,杭州发布官网要为MySQL配置SSL加密访问#xff0c;核心目标是让客户端与MySQL服务端之间的网络传输数据被SSL/TLS加密#xff0c;防止数据在传输过程中被窃听、篡改或伪造。以下是完整的配置步骤#xff08;涵盖自建证书、服务端配置、客户端验证#xff09;#xff0c;分为「测试环境…要为MySQL配置SSL加密访问核心目标是让客户端与MySQL服务端之间的网络传输数据被SSL/TLS加密防止数据在传输过程中被窃听、篡改或伪造。以下是完整的配置步骤涵盖自建证书、服务端配置、客户端验证分为「测试环境自建自签名证书」和「生产环境CA签发证书」两种场景。这里着重讲解自建方案个人感觉自建方案可操作性强CA签发证书一年需要更新一次对于数据库来讲谁也受不了。一、前提说明MySQL版本要求5.7及以上默认支持SSL8.0内置简易证书生成工具推荐使用核心逻辑MySQL通过SSL证书完成服务端/客户端身份验证同时加密传输数据证书类型自签名证书适合测试/内网环境无需CA认证但客户端需信任该证书CA签发证书适合生产环境安全性更高需向可信CA申请证书。二、步骤1生成SSL证书自建自签名测试环境方式1MySQL内置工具自动生成推荐8.0MySQL 8.0提供mysql_ssl_rsa_setup工具可一键生成自签名SSL证书# 1. 进入MySQL数据目录需确认目录权限通常为/var/lib/mysql/ cd /var/lib/mysql chown mysql:mysql . # 确保mysql用户有读写权限 # 2. 生成SSL证书--datadir指定证书存放目录 mysql_ssl_rsa_setup --datadir/var/lib/mysql --uidmysql # 3. 查看生成的证书文件关键文件如下 ls -l /var/lib/mysql/*.pem # 核心文件说明 # ca.pem → CA根证书客户端需信任 # server-cert.pem → 服务端证书 # server-key.pem → 服务端私钥 # client-cert.pem → 客户端证书 # client-key.pem → 客户端私钥方式2手动生成适配5.7/8.0通用若mysql_ssl_rsa_setup不可用用openssl手动生成# 1. 创建证书目录建议与MySQL数据目录分离 mkdir -p /etc/mysql/ssl chown mysql:mysql /etc/mysql/ssl cd /etc/mysql/ssl # 2. 生成CA根证书有效期10年 openssl genrsa 2048 ca-key.pem openssl req -new -x509 -nodes -days 3650 -key ca-key.pem ca.pem # 3. 生成服务端证书填写信息时Common Name需为MySQL服务端IP/域名 openssl req -newkey rsa:2048 -days 3650 -nodes -keyout server-key.pem server-req.pem openssl rsa -in server-key.pem -out server-key.pem openssl x509 -req -in server-req.pem -days 3650 -CA ca.pem -CAkey ca-key.pem -set_serial 01 server-cert.pem # 4. 生成客户端证书Common Name可任意建议区分服务端 openssl req -newkey rsa:2048 -days 3650 -nodes -keyout client-key.pem client-req.pem openssl rsa -in client-key.pem -out client-key.pem openssl x509 -req -in client-req.pem -days 3650 -CA ca.pem -CAkey ca-key.pem -set_serial 02 client-cert.pem # 5. 调整权限仅mysql用户可读写防止私钥泄露 chmod 600 *.pem chown mysql:mysql *.pem三、步骤2配置MySQL服务端启用SSL1. 修改MySQL配置文件编辑MySQL配置文件Linux/etc/my.cnf//etc/mysql/my.cnfWindowsmy.ini添加以下配置[mysqld] # 启用SSL强制服务端使用SSL sslON # 指定证书路径根据实际生成路径修改 ssl-ca/var/lib/mysql/ca.pem # CA根证书 ssl-cert/var/lib/mysql/server-cert.pem # 服务端证书 ssl-key/var/lib/mysql/server-key.pem # 服务端私钥 # 可选强制所有客户端连接必须使用SSL生产环境建议开启 # require_secure_transportON # 可选指定SSL协议版本避免老旧协议生产环境建议 tls_versionTLSv1.2,TLSv1.32. 重启MySQL服务# LinuxSystemd systemctl restart mysqld # LinuxSysV service mysqld restart # Windows net stop mysql net start mysql3. 验证服务端SSL是否启用登录MySQL服务端执行以下命令-- 查看SSL状态Ssl_enabled为YES表示启用成功 SHOW VARIABLES LIKE %ssl%; /* 预期输出 ------------------------------------------ | Variable_name | Value | ------------------------------------------ | have_ssl | YES | | ssl_ca | /var/lib/mysql/ca.pem | | ssl_cert | /var/lib/mysql/server-cert.pem | | ssl_key | /var/lib/mysql/server-key.pem | ------------------------------------------ */四、步骤3配置客户端SSL连接场景1客户端连接时手动指定SSL非强制客户端连接MySQL时通过参数指定SSL证书实现加密连接# MySQL客户端命令行连接替换为你的IP/端口/用户名 mysql -h 192.168.1.100 -P 3306 -u root -p \ --ssl-modeREQUIRED \ --ssl-ca/var/lib/mysql/ca.pem \ --ssl-cert/var/lib/mysql/client-cert.pem \ --ssl-key/var/lib/mysql/client-key.pem参数说明--ssl-modeREQUIRED强制使用SSL连接无SSL则拒绝可选值DISABLED/REQUIRED/VERIFY_CA/VERIFY_IDENTITY--ssl-ca指定CA根证书验证服务端证书合法性--ssl-cert/--ssl-key客户端证书/私钥服务端验证客户端身份时需用。场景2授权用户必须使用SSL连接生产环境为MySQL用户配置“仅允许SSL加密连接”防止明文连接-- 授权root用户仅能通过SSL从任意主机访问替换为你的用户/IP GRANT ALL PRIVILEGES ON *.* TO root% IDENTIFIED BY 你的密码 REQUIRE SSL; -- 刷新权限 FLUSH PRIVILEGES; -- 查看用户的SSL权限Ssl_type为SSL表示强制 SELECT user, host, ssl_type FROM mysql.user WHERE userroot;场景3客户端配置文件持久化SSL无需每次输参数编辑客户端~/.my.cnfLinux或%APPDATA%\MySQL\.my.cnfWindows[client] host192.168.1.100 port3306 userroot password你的密码 ssl-modeREQUIRED ssl-ca/var/lib/mysql/ca.pem ssl-cert/var/lib/mysql/client-cert.pem ssl-key/var/lib/mysql/client-key.pem之后直接执行mysql即可自动使用SSL连接。五、步骤4验证SSL加密是否生效1. 客户端验证连接状态登录MySQL后执行以下命令-- 查看当前连接的SSL状态Ssl_cipher非空表示加密生效 SHOW STATUS LIKE Ssl_cipher; /* 预期输出 -------------------------------------------- | Variable_name | Value | -------------------------------------------- | Ssl_cipher | TLS_AES_256_GCM_SHA384 | -------------------------------------------- */2. 网络层面验证可选用tcpdump/wireshark抓包查看MySQL端口3306的流量未加密能看到明文的SQL语句如SELECT * FROM user已加密流量为乱码无明文SQL。六、关键注意事项生产环境建议不要使用自签名证书改用Let’s Encrypt等可信CA签发的证书启用require_secure_transportON强制所有连接使用SSL限制SSL协议版本为TLSv1.2禁用TLSv1.0/TLSv1.1老旧协议有安全漏洞。2.权限安全证书文件尤其是私钥.pem必须仅对mysql用户可读写权限600防止泄露客户端证书不要随意外传仅分发给可信客户端。3.性能影响SSL加密会增加少量CPU开销约5%-10%高并发场景可通过硬件加速优化若内网环境已做网络隔离可仅对跨公网的连接启用SSL。4.常见问题连接失败提示SSL connection error检查证书路径/权限、MySQL服务端SSL是否启用客户端验证失败确保CA证书一致服务端/客户端证书的Common Name匹配MySQL 5.7以下需手动编译启用SSL建议升级到5.7。