MySQL SSL连接需先确认支持、生成证书、配置服务端、强制用户SSL及客户端启用;具体包括检查have_ssl变量、用OpenSSL生成CA/服务器/客户端证书、配置my.cnf中ssl-ca/cert/key路径、ALTER USER REQUIRE SSL、客户端使用--ssl-mode=REQUIRED或代码中传入SSL参数。

MySQL SSL 连接能加密客户端与服务器之间的通信,防止数据在传输中被窃听或篡改。开启 SSL 不是单纯改个配置就行,需生成证书、配置服务端、验证启用状态,并让客户端明确使用 SSL 连接。
一、检查 MySQL 是否支持 SSL
登录 MySQL 执行以下命令:
SHOW VARIABLES LIKE 'have_ssl';
若返回 YES,说明编译时启用了 SSL 支持;若为 red">DISABLED 或 NO,需重新编译或升级 MySQL 版本(5.7.10+ 和 8.0 默认支持)。
二、生成 SSL 证书和密钥文件
推荐使用 OpenSSL 工具自建(测试/内网可用),生产环境建议使用受信任 CA 签发的证书。
在 MySQL 数据目录外新建 ssl 目录,执行以下命令:
-
生成 CA 私钥和证书:
openssl genrsa 2048 > ca-key.pem
openssl req -new -x509 -nodes -days 3650 -key ca-key.pem -out ca.pem -
生成服务器私钥和 CSR:
openssl req -newkey rsa:2048 -days 3650 -nodes -keyout server-key.pem -out server-req.pem -
生成服务器证书(用 CA 签发):
openssl x509 -req -in server-req.pem -days 3650 -CA ca.pem -CAkey ca-key.pem -set_serial 01 -out server-cert.pem -
生成客户端私钥和证书(可选,用于双向认证):
openssl req -newkey rsa:2048 -days 3650 -nodes -keyout client-key.pem -out client-req.pem
openssl x509 -req -in client-req.pem -days 3650 -CA ca.pem -CAkey ca-key.pem -set_serial 02 -out client-cert.pem
最终得到关键文件:ca.pem、server-cert.pem、server-key.pem(客户端还需 client-cert.pem 和 client-key.pem)。
三、配置 MySQL 服务端启用 SSL
编辑 MySQL 配置文件(如 /etc/my.cnf 或 /etc/mysql/mysql.conf.d/mysqld.cnf),在 [mysqld] 段添加:
ssl-ca=/path/to/ca.pem
ssl-cert=/path/to/server-cert.pem
ssl-key=/path/to/server-key.pem
重启 MySQL:sudo systemctl restart mysql(或 mysqld)。
用BluetoothAdapter类,你能够在Android设备上查找周边的蓝牙设备然后配对(绑定),蓝牙通讯是基于唯一地址MAC来相互 传输的,考虑到安全问题Bluetooth通讯时需要先配对。然后开始相互连接,连接后设备将会共享同一个RFCOMM通道以便相互传输数据,目前这些实 现在Android 2.0或更高版本SDK上实现。 一、查找发现 findding/discovering devices 对于Android查找发现蓝牙设备使用BluetoothAdapter类的startDisco
验证是否生效:
SHOW VARIABLES LIKE '%ssl%';
确保 have_ssl = YES,且 ssl_ca、ssl_cert、ssl_key 显示对应路径。
四、强制用户使用 SSL 连接(可选但推荐)
为提升安全性,可限制特定用户必须通过 SSL 登录:
CREATE USER 'appuser'@'%' IDENTIFIED BY 'password';
ALTER USER 'appuser'@'%' REQUIRE SSL;
FLUSH PRIVILEGES;
之后该用户若不加 --ssl-mode=REQUIRED 或等效参数,将无法连接。
五、客户端连接时启用 SSL
不同客户端方式略有差异:
-
mysql 命令行:
mysql -u appuser -p --ssl-mode=REQUIRED
或指定证书(双向认证时):mysql -u appuser -p --ssl-ca=ca.pem --ssl-cert=client-cert.pem --ssl-key=client-key.pem -
MySQL 8.0+ 默认启用安全连接:
若服务端配置了有效证书,新版客户端会自动尝试 SSL;可通过--ssl-mode=DISABLED关闭(不建议)。 -
应用代码(如 Python PyMySQL):
在连接参数中加入:ssl={'ca': '/path/to/ca.pem', 'cert': '/path/to/client-cert.pem', 'key': '/path/to/client-key.pem'}
连接成功后,执行 STATUS; 或 SELECT * FROM performance_schema.status_by_thread WHERE VARIABLE_NAME = 'Ssl_cipher';,非空表示当前连接已加密。









