宝塔面板中MySQL启用SSL加密需五步:一、用OpenSSL生成ca.pem、server-cert.pem、server-key.pem并设私钥权限600;二、在MySQL配置文件[mysqld]下添加ssl-ca、ssl-cert、ssl-key路径并重启;三、验证have_ssl为YES,创建REQUIRE SSL用户并授权;四、宝塔防火墙及云平台安全组放行3306端口,确认MySQL监听0.0.0.0;五、用--ssl-mode=REQUIRED连接并验证ssl_cipher非空,DISABLED模式应拒绝访问。

如果您在宝塔面板中运行MySQL服务,但客户端与数据库之间的通信未启用SSL加密,则存在明文传输敏感数据的风险。以下是为MySQL配置SSL加密传输连接的具体操作步骤:
一、生成MySQL SSL证书文件
MySQL需使用服务器端证书、私钥及CA证书来启用SSL连接。宝塔面板未内置自动签发功能,需手动通过OpenSSL生成或使用已有的合法证书。生成过程需确保私钥权限严格限制,且证书内容符合MySQL版本要求。
1、通过SSH登录服务器,进入MySQL配置目录的上级安全路径,例如 /www/server/panel/vhost/cert/mysql_ssl/。
2、执行命令生成CA密钥与证书:openssl genrsa 2048 > ca-key.pem && openssl req -new -x509 -nodes -days 3650 -key ca-key.pem -out ca.pem。
3、生成服务器私钥与证书签名请求:openssl genrsa 2048 > server-key.pem && openssl req -new -key server-key.pem -out server.csr。
4、使用CA签署服务器证书:openssl x509 -req -in server.csr -days 3650 -CA ca.pem -CAkey ca-key.pem -CAcreateserial -out server-cert.pem。
5、确认生成的三个关键文件存在于目标目录:ca.pem、server-cert.pem、server-key.pem,并设置私钥权限为600:chmod 600 server-key.pem。
二、修改MySQL配置文件启用SSL
MySQL必须通过配置项明确指定SSL证书路径,并强制部分或全部连接使用加密通道。配置更改后需重启服务生效,且须避免路径错误或权限不足导致启动失败。
1、在宝塔面板左侧菜单点击 软件商店 → MySQL → 设置 → 配置修改,定位到 [mysqld] 区块末尾。
2、在该区块下新增以下三行配置(路径需与上一步生成文件实际位置完全一致):ssl-ca=/www/server/panel/vhost/cert/mysql_ssl/ca.pem。
3、继续添加:ssl-cert=/www/server/panel/vhost/cert/mysql_ssl/server-cert.pem。
4、最后添加:ssl-key=/www/server/panel/vhost/cert/mysql_ssl/server-key.pem。
5、保存配置后,在MySQL设置页点击 重启 按钮,使新参数加载生效。
三、验证MySQL SSL状态并创建强制SSL用户
配置完成后需确认MySQL实例已正确加载SSL参数,并通过新建仅允许SSL连接的数据库用户,确保客户端连接强制走加密通道。此步骤可防止旧用户仍使用非加密方式接入。
1、在宝塔面板中点击 数据库 → 点击对应数据库名右侧的“管理”按钮,进入phpMyAdmin界面。
2、执行SQL语句:SHOW VARIABLES LIKE '%ssl%';,检查 have_ssl 值为 YES,且 ssl_ca 等路径显示正确。
3、执行查询:SHOW STATUS LIKE 'Ssl%';,确认 Ssl_sessions 数值在后续连接后递增。
4、执行用户创建语句(以用户名 ssl_user 为例):CREATE USER 'ssl_user'@'%' IDENTIFIED BY 'StrongPass123!' REQUIRE SSL;。
5、为该用户授权:GRANT ALL PRIVILEGES ON mydb.* TO 'ssl_user'@'%'; FLUSH PRIVILEGES;。
四、在宝塔防火墙及安全组中放行加密连接端口
SSL连接本身不改变默认端口,但仍需确保MySQL监听端口(默认3306)在系统级和网络级均开放,且未被宝塔防火墙规则拦截。若启用自定义端口,须同步调整所有层级策略。
1、在宝塔面板左侧点击 安全 → 放行端口,输入 3306 并点击放行(若已存在则跳过)。
2、确认服务器厂商控制台(如阿里云、腾讯云)中的安全组规则,已添加入方向规则:端口范围:3306/3306,授权对象:0.0.0.0/0 或指定IP段。
3、返回SSH终端,执行:netstat -tlnp | grep :3306,确认MySQL进程监听在 *:3306 且状态为 LISTEN。
4、检查MySQL是否绑定至全部接口(而非仅127.0.0.1):在配置文件中确认存在 bind-address = 0.0.0.0 或已注释该行。
五、测试SSL客户端连接
使用支持SSL的MySQL客户端工具连接,验证证书校验与加密通道建立是否成功。连接失败时需依据错误码反查证书路径、权限或TLS版本兼容性问题。
1、在本地安装MySQL命令行客户端,执行连接命令:mysql -u ssl_user -p -h your_server_ip --ssl-mode=REQUIRED。
2、连接成功后,执行:STATUS;,在输出中查找 SSL: Cipher in use is ... 行,确认非 SSL: Not in use。
3、执行:SELECT @@session.ssl_cipher;,返回非空字符串即表示当前会话已启用SSL加密。
4、尝试使用非SSL模式连接同一用户:mysql -u ssl_user -p -h your_server_ip --ssl-mode=DISABLED,应返回错误 ERROR 1045 (28000): Access denied for user。










