Part01-基础概念与理论知识
1.1 MySQL加密连接概述
MySQL加密连接是通过SSL/TLS协议对客户端与服务器之间的通信进行加密,防止数据在传输过程中被窃取或篡改。风哥教程参考MySQL官方文档Security部分的加密连接相关内容。更多视频教程www.fgedu.net.cn
mysql> SHOW VARIABLES LIKE ‘have_ssl’;
+—————+——-+
| Variable_name | Value |
+—————+——-+
| have_ssl | YES |
+—————+——-+
1 row in set (0.00 sec)
1.2 SSL/TLS协议基础
SSL(Secure Sockets Layer)和TLS(Transport Layer Security)是用于在网络通信中提供加密和身份验证的协议。TLS是SSL的后继版本,提供了更强的安全性。学习交流加群风哥微信: itpux-com
1.3 MySQL加密连接工作原理
MySQL加密连接的工作原理包括:1. 握手阶段:客户端与服务器协商加密算法和密钥;2. 身份验证阶段:验证服务器和客户端的身份;3. 数据传输阶段:使用协商的密钥对数据进行加密传输。学习交流加群风哥QQ113257174
mysql> SHOW STATUS LIKE ‘Ssl_cipher’;
+—————+—————————+
| Variable_name | Value |
+—————+—————————+
| Ssl_cipher | TLS_AES_256_GCM_SHA384 |
+—————+—————————+
1 row in set (0.00 sec)
Part02-生产环境规划与建议
2.1 加密连接规划
在生产环境中,需要根据实际情况规划加密连接的实施范围和方式。对于敏感数据的传输,应强制使用SSL加密连接。风哥提示:生产环境中,所有远程连接都应该使用SSL加密,以确保数据安全。
2.2 证书管理策略
证书管理是SSL/TLS配置的重要组成部分,包括证书的生成、分发、更新和撤销等环节。合理的证书管理策略可以确保SSL连接的安全性。更多学习教程公众号风哥教程itpux_com
# openssl x509 -in /mysql/ssl/server-cert.pem -text -noout
Certificate:
Data:
Version: 3 (0x2)
Serial Number: 1234567890 (0x499602d2)
Signature Algorithm: sha256WithRSAEncryption
Issuer: C=CN, ST=Beijing, L=Beijing, O=FGEDU, OU=Database, CN=fgedu.net.cn
Validity
Not Before: Apr 1 00:00:00 2026 GMT
Not After : Apr 1 00:00:00 2027 GMT
Subject: C=CN, ST=Beijing, L=Beijing, O=FGEDU, OU=Database, CN=fgedu.net.cn
Subject Public Key Info:
Public Key Algorithm: rsaEncryption
Public-Key: (2048 bit)
Modulus:
00:9a:1b:2c:3d:4e:5f:6a:7b:8c:9d:0e:1f:2a:3b:4c:5d:
6e:7f:8a:9b:0c:1d:2e:3f:4a:5b:6c:7d:8e:9f:0a:1b:2c:
3d:4e:5f:6a:7b:8c:9d:0e:1f:2a:3b:4c:5d:6e:7f:8a:9b:
0c:1d:2e:3f:4a:5b:6c:7d:8e:9f:0a:1b:2c:3d:4e:5f:6a:
7b:8c:9d:0e:1f:2a:3b:4c:5d:6e:7f:8a:9b:0c:1d:2e:3f:
4a:5b:6c:7d:8e:9f:0a:1b:2c:3d:4e:5f:6a:7b:8c:9d:0e:
1f:2a:3b:4c:5d:6e:7f:8a:9b:0c:1d:2e:3f:4a:5b:6c:7d:
8e:9f:0a:1b:2c:3d:4e:5f:6a:7b:8c:9d:0e:1f:2a:3b:4c:
5d:6e:7f:8a:9b:0c:1d:2e:3f:4a:5b:6c:7d:8e:9f:0a:1b:
2c:3d:4e:5f:6a:7b:8c:9d:0e:1f:2a:3b:4c:5d:6e:7f:8a:
9b:0c:1d:2e:3f:4a:5b:6c:7d:8e:9f:0a:1b:2c:3d:4e:5f:
6a:7b:8c:9d:0e:1f:2a:3b:4c:5d:6e:7f:8a:9b:0c:1d:2e:
3f:4a:5b:6c:7d:8e:9f:0a:1b:2c:3d:4e:5f:6a:7b:8c:9d:
0e:1f:2a:3b:4c:5d:6e:7f:8a:9b:0c:1d:2e:3f:4a:5b:6c:
7d:8e:9f:0a:1b:2c:3d:4e:5f:6a:7b:8c:9d:0e:1f:2a:3b:
4c:5d:6e:7f:8a:9b:0c:1d:2e:3f:4a:5b:6c:7d:8e:9f:0a
Exponent: 65537 (0x10001)
2.3 性能影响评估
启用SSL加密连接会对MySQL的性能产生一定影响,主要体现在CPU使用率和网络延迟上。在实施前需要评估性能影响,并采取相应的优化措施。from MySQL:www.itpux.com
# mysqlslap –user=fgedu_admin –password=StrongPassword123! –host=192.168.1.100 –port=3306 –ssl-mode=REQUIRED –concurrency=100 –iterations=10 –query=”SELECT * FROM fgedudb.fgedu_users LIMIT 100″
Benchmark
Average number of seconds to run all queries: 0.123 seconds
Minimum number of seconds to run all queries: 0.101 seconds
Maximum number of seconds to run all queries: 0.156 seconds
Number of clients running queries: 100
Average number of queries per client: 1
# 测试非SSL连接性能
# mysqlslap –user=fgedu_admin –password=StrongPassword123! –host=192.168.1.100 –port=3306 –ssl-mode=DISABLED –concurrency=100 –iterations=10 –query=”SELECT * FROM fgedudb.fgedu_users LIMIT 100″
Benchmark
Average number of seconds to run all queries: 0.098 seconds
Minimum number of seconds to run all queries: 0.082 seconds
Maximum number of seconds to run all queries: 0.123 seconds
Number of clients running queries: 100
Average number of queries per client: 1
Part03-生产环境项目实施方案
3.1 SSL证书生成
生成SSL证书是配置MySQL加密连接的第一步。可以使用自签名证书或由可信CA签发的证书。在生产环境中,建议使用由可信CA签发的证书。
# mkdir -p /mysql/ssl
# cd /mysql/ssl
# 生成CA私钥
# openssl genrsa 2048 > ca-key.pem
# 生成CA证书
# openssl req -new -x509 -nodes -days 3650 -key ca-key.pem -out ca.pem
# 生成服务器私钥
# openssl genrsa 2048 > server-key.pem
# 生成服务器证书请求
# openssl req -new -key server-key.pem -out server-req.pem
# 生成服务器证书
# openssl x509 -req -in server-req.pem -days 3650 -CA ca.pem -CAkey ca-key.pem -set_serial 01 > server-cert.pem
# 生成客户端私钥
# openssl genrsa 2048 > client-key.pem
# 生成客户端证书请求
# openssl req -new -key 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 > client-cert.pem
# 设置权限
# chmod 600 *.pem
# chown mysql:mysql *.pem
3.2 MySQL服务器SSL配置
配置MySQL服务器使用SSL证书,启用加密连接。
# vi /etc/my.cnf
[mysqld]
ssl-ca=/mysql/ssl/ca.pem
ssl-cert=/mysql/ssl/server-cert.pem
ssl-key=/mysql/ssl/server-key.pem
# 重启MySQL服务
# systemctl restart mysqld
# 验证SSL配置
mysql> SHOW VARIABLES LIKE ‘%ssl%’;
+—————+—————————-+
| Variable_name | Value |
+—————+—————————-+
| have_ssl | YES |
| ssl_ca | /mysql/ssl/ca.pem |
| ssl_cert | /mysql/ssl/server-cert.pem |
| ssl_key | /mysql/ssl/server-key.pem |
+—————+—————————-+
4 rows in set (0.00 sec)
3.3 客户端SSL配置
配置MySQL客户端使用SSL连接,确保客户端与服务器之间的通信被加密。
# vi /etc/my.cnf.d/client.cnf
[client]
ssl-ca=/mysql/ssl/ca.pem
ssl-cert=/mysql/ssl/client-cert.pem
ssl-key=/mysql/ssl/client-key.pem
# 测试SSL连接
# mysql -u fgedu_admin -p –ssl-mode=REQUIRED
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 123
Server version: 8.4.0 MySQL Community Server – GPL
Copyright (c) 2000, 2026, Oracle and/or its affiliates.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type ‘help;’ or ‘\h’ for help. Type ‘\c’ to clear the current input statement.
mysql> \s
————–
mysql Ver 8.4.0 for Linux on x86_64 (MySQL Community Server – GPL)
Connection id: 123
Current database: fgedudb
Current user: fgedu_admin@192.168.1.200
SSL: Cipher in use is TLS_AES_256_GCM_SHA384
Current pager: stdout
Using outfile: ”
Using delimiter: ;
Server version: 8.4.0 MySQL Community Server – GPL
Protocol version: 10
Connection: 192.168.1.100 via TCP/IP
Server characterset: utf8mb4
Db characterset: utf8mb4
Client characterset: utf8mb4
Conn. characterset: utf8mb4
TCP port: 3306
Binary data as: Hexadecimal
————–
Part04-生产案例与实战讲解
4.1 单向SSL认证配置
单向SSL认证是指客户端验证服务器的身份,而服务器不验证客户端的身份。这是最常见的SSL配置方式。
mysql> CREATE USER ‘fgedu_ssl’@’%’ IDENTIFIED BY ‘StrongPassword123!’ REQUIRE SSL;
Query OK, 0 rows affected (0.01 sec)
# 授予权限
mysql> GRANT SELECT ON fgedudb.* TO ‘fgedu_ssl’@’%’;
Query OK, 0 rows affected (0.00 sec)
# 测试SSL连接
# mysql -u fgedu_ssl -p –ssl-mode=REQUIRED -h 192.168.1.100
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 124
Server version: 8.4.0 MySQL Community Server – GPL
mysql> SHOW STATUS LIKE ‘Ssl_cipher’;
+—————+—————————+
| Variable_name | Value |
+—————+—————————+
| Ssl_cipher | TLS_AES_256_GCM_SHA384 |
+—————+—————————+
1 row in set (0.00 sec)
4.2 双向SSL认证配置
双向SSL认证是指客户端和服务器互相验证对方的身份,提供更高的安全性。适用于对安全性要求较高的场景。
mysql> CREATE USER ‘fgedu_ssl双向’@’%’ IDENTIFIED BY ‘StrongPassword123!’ REQUIRE X509;
Query OK, 0 rows affected (0.01 sec)
# 授予权限
mysql> GRANT SELECT ON fgedudb.* TO ‘fgedu_ssl双向’@’%’;
Query OK, 0 rows affected (0.00 sec)
# 测试双向SSL连接
# mysql -u fgedu_ssl双向 -p –ssl-mode=VERIFY_CA –ssl-ca=/mysql/ssl/ca.pem –ssl-cert=/mysql/ssl/client-cert.pem –ssl-key=/mysql/ssl/client-key.pem -h 192.168.1.100
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 125
Server version: 8.4.0 MySQL Community Server – GPL
mysql> SHOW STATUS LIKE ‘Ssl_cipher’;
+—————+—————————+
| Variable_name | Value |
+—————+—————————+
| Ssl_cipher | TLS_AES_256_GCM_SHA384 |
+—————+—————————+
1 row in set (0.00 sec)
4.3 SSL连接故障排查
在配置SSL连接时,可能会遇到各种问题,如证书无效、权限错误等。以下是常见SSL连接故障的排查方法。
# tail -f /mysql/logs/error.log
2026-04-01T09:00:00.123456Z 126 [ERROR] SSL error: SSL_CTX_set_default_verify_paths failed
# 检查证书权限
# ls -la /mysql/ssl/
-rw——- 1 mysql mysql 1679 Apr 1 00:00 ca-key.pem
-rw-r–r– 1 mysql mysql 1359 Apr 1 00:00 ca.pem
-rw——- 1 mysql mysql 1679 Apr 1 00:00 client-key.pem
-rw-r–r– 1 mysql mysql 1103 Apr 1 00:00 client-cert.pem
-rw——- 1 mysql mysql 1679 Apr 1 00:00 server-key.pem
-rw-r–r– 1 mysql mysql 1103 Apr 1 00:00 server-cert.pem
# 检查证书有效性
# openssl verify -CAfile ca.pem server-cert.pem
server-cert.pem: OK
# 测试SSL连接
# mysql -u fgedu_admin -p –ssl-mode=REQUIRED –ssl-ca=/mysql/ssl/ca.pem -h 192.168.1.100
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 127
Server version: 8.4.0 MySQL Community Server – GPL
Part05-风哥经验总结与分享
通过多年的MySQL数据库管理经验,我总结了以下关于MySQL加密连接的关键点:
1. 证书选择:生产环境中建议使用由可信CA签发的证书,自签名证书仅适用于测试环境。
2. 配置最佳实践:使用强加密算法,如TLS 1.2或TLS 1.3,选择合适的加密套件。
3. 性能优化:可以通过增加服务器CPU资源、优化SSL配置参数等方式来减轻SSL对性能的影响。
4. 监控与审计:定期检查SSL证书的有效期,监控SSL连接的状态和性能。
5. 故障排查:掌握常见SSL连接故障的排查方法,快速解决问题,减少业务中断时间。
6. 安全更新:及时更新MySQL版本和SSL库,以获取最新的安全修复。
本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html
