千家信息网

MySQL 5.7--------SSL连接最佳实战

发表于:2025-11-11 作者:千家信息网编辑
千家信息网最后更新 2025年11月11日,1. 背景* 在生产环境下,安全总是无法忽视的问题,数据库安全则是重中之重,因为所有的数据都存放在数据库中* 当使用非加密方式连接MySQL数据库时,在网络中传输的所有信息都是明文的,可以被网络中所有
千家信息网最后更新 2025年11月11日MySQL 5.7--------SSL连接最佳实战

1. 背景

* 在生产环境下,安全总是无法忽视的问题,数据库安全则是重中之重,因为所有的数据都存放在数据库中

* 当使用非加密方式连接MySQL数据库时,在网络中传输的所有信息都是明文的,可以被网络中所有人截取,敏感信息可能被泄露。在传送敏感信息(如密码)时,可以采用SSL连接的方式。

* 版本小于5.7.6时按照 MySQL 5.6 SSL配置的方式进行。


2. MySQL 连接方式

* socket连接

* TCP非SSL连接

* SSL安全连接

* SSL + 密码连接 [version > MySQL 5.7.5]

   * SSL + 密码 + 密钥连接


3. SSL 简介

* SSL指的是SSL/TLS,其是一种为了在计算机网络进行安全通信的加密协议。假设用户的传输不是通过SSL的方式,那么其在网络中以明文的方式进行传输,而这给别有用心的人带来了可乘之机。所以,现在很多网站其实默认已经开启了SSL功能,比如Facebook、Twtter、YouTube、淘宝等。


4. 环境 [ 关闭SeLinux ]

* system 环境

[root@MySQL ~]# cat /etc/redhat-release CentOS release 6.9 (Final)[root@MySQL ~]# uname -r2.6.32-696.3.2.el6.x86_64[root@MySQL ~]# getenforce Disabled

* MySQL 环境 [ MySQL 5.7安装前面篇章已做详细介绍 ]

have_openssl 与 have_ssl 值都为DISABLED表示ssl未开启

[root@MySQL ~]# mysql -p'123'mysql: [Warning] Using a password on the command line interface can be insecure.Welcome to the MySQL monitor.  Commands end with ; or \g.Your MySQL connection id is 6Server version: 5.7.18 MySQL Community Server (GPL)Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved.Oracle is a registered trademark of Oracle Corporation and/or itsaffiliates. Other names may be trademarks of their respectiveowners.Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.mysql> select version();+-----------+| version() |+-----------+| 5.7.18    |+-----------+1 row in set (0.00 sec)mysql> show variables like 'have%ssl%';+---------------+----------+| Variable_name | Value    |+---------------+----------+| have_openssl  | DISABLED || have_ssl      | DISABLED |+---------------+----------+2 rows in set (0.02 sec)mysql> show variables like 'port';+---------------+-------+| Variable_name | Value |+---------------+-------+| port          | 3306  |+---------------+-------+1 row in set (0.01 sec)mysql> show variables like 'datadir';+---------------+-------------------+| Variable_name | Value             |+---------------+-------------------+| datadir       | /data/mysql_data/ |+---------------+-------------------+1 row in set (0.01 sec)


5. SSL配置

* 利用自带工具生成SSL相关文件

[root@MySQL ~]# /usr/local/mysql/bin/mysql_ssl_rsa_setup --datadir=/data/mysql_dataGenerating a 2048 bit RSA private key..........................................................................+++.....+++writing new private key to 'ca-key.pem'-----Generating a 2048 bit RSA private key.......................................................................................................................................................................+++...+++writing new private key to 'server-key.pem'-----Generating a 2048 bit RSA private key.....................+++...........................................+++writing new private key to 'client-key.pem'-----


* 查看生成的SSL文件

[root@MySQL ~]# ls -l /data/mysql_data/*.pem-rw------- 1 root root 1679 Jun 24 20:54 /data/mysql_data/ca-key.pem-rw-r--r-- 1 root root 1074 Jun 24 20:54 /data/mysql_data/ca.pem-rw-r--r-- 1 root root 1078 Jun 24 20:54 /data/mysql_data/client-cert.pem-rw------- 1 root root 1675 Jun 24 20:54 /data/mysql_data/client-key.pem-rw------- 1 root root 1675 Jun 24 20:54 /data/mysql_data/private_key.pem-rw-r--r-- 1 root root  451 Jun 24 20:54 /data/mysql_data/public_key.pem-rw-r--r-- 1 root root 1078 Jun 24 20:54 /data/mysql_data/server-cert.pem-rw------- 1 root root 1675 Jun 24 20:54 /data/mysql_data/server-key.pem


* 修改数据目录下生成的SSL文件所属用户与权限

[root@MySQL ~]# chown -v mysql.mysql /data/mysql_data/*.pemchanged ownership of `/data/mysql_data/ca-key.pem' to mysql:mysqlchanged ownership of `/data/mysql_data/ca.pem' to mysql:mysqlchanged ownership of `/data/mysql_data/client-cert.pem' to mysql:mysqlchanged ownership of `/data/mysql_data/client-key.pem' to mysql:mysqlchanged ownership of `/data/mysql_data/private_key.pem' to mysql:mysqlchanged ownership of `/data/mysql_data/public_key.pem' to mysql:mysqlchanged ownership of `/data/mysql_data/server-cert.pem' to mysql:mysqlchanged ownership of `/data/mysql_data/server-key.pem' to mysql:mysql


* 查看生成的SSL文件

[root@MySQL ~]# ls -l /data/mysql_data/*.pem-rw------- 1 mysql mysql 1679 Jun 24 20:54 /data/mysql_data/ca-key.pem-rw-r--r-- 1 mysql mysql 1074 Jun 24 20:54 /data/mysql_data/ca.pem-rw-r--r-- 1 mysql mysql 1078 Jun 24 20:54 /data/mysql_data/client-cert.pem-rw------- 1 mysql mysql 1675 Jun 24 20:54 /data/mysql_data/client-key.pem-rw------- 1 mysql mysql 1675 Jun 24 20:54 /data/mysql_data/private_key.pem-rw-r--r-- 1 mysql mysql  451 Jun 24 20:54 /data/mysql_data/public_key.pem-rw-r--r-- 1 mysql mysql 1078 Jun 24 20:54 /data/mysql_data/server-cert.pem-rw------- 1 mysql mysql 1675 Jun 24 20:54 /data/mysql_data/server-key.pem


* 重启 MySQL 服务

[root@MySQL ~]# /etc/init.d/mysqld restartShutting down MySQL.. SUCCESS! Starting MySQL. SUCCESS!


* 连接MySQL 查看SSL开启状态

have_openssl 与 have_ssl 值都为YES表示ssl开启成功

mysql> show variables like 'have%ssl%';+---------------+-------+| Variable_name | Value |+---------------+-------+| have_openssl  | YES   || have_ssl      | YES   |+---------------+-------+2 rows in set (0.03 sec)


6. SSL + 密码连接测试

* 创建用户并指定 SSL 连接 [ MySQL 5.7后推荐使用create user 方式创建用户 ]

mysql> create user 'ssl_test'@'%' identified by '123' require SSL;Query OK, 0 rows affected (0.00 sec)


* 通过密码连接测试 [ 默认采用SSL连接,需要指定不使用SSL连接 ]

[root@MySQL ~]# mysql -h 192.168.60.129 -ussl_test -p'123' --ssl=0mysql: [Warning] Using a password on the command line interface can be insecure.ERROR 1045 (28000): Access denied for user 'ssl_test'@'192.168.60.129' (using password: YES)


* 通过 SSL + 密码 连接测试

SSL: Cipher in use is DHE-RSA-AES256-SHA 表示通过SSL连接

[root@MySQL ~]# mysql -h 192.168.60.129 -ussl_test -p'123'  --sslmysql: [Warning] Using a password on the command line interface can be insecure.WARNING: --ssl is deprecated and will be removed in a future version. Use --ssl-mode instead.Welcome to the MySQL monitor.  Commands end with ; or \g.Your MySQL connection id is 12Server version: 5.7.18 MySQL Community Server (GPL)Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved.Oracle is a registered trademark of Oracle Corporation and/or itsaffiliates. Other names may be trademarks of their respectiveowners.Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.mysql> \s--------------mysql  Ver 14.14 Distrib 5.7.18, for linux-glibc2.5 (x86_64) using  EditLine wrapperConnection id:             12Current database:  Current user:              ssl_test@192.168.60.129SSL:                    Cipher in use is DHE-RSA-AES256-SHACurrent pager:             stdoutUsing outfile:             ''Using delimiter:   ;Server version:            5.7.18 MySQL Community Server (GPL)Protocol version:  10Connection:             192.168.60.129 via TCP/IPServer characterset:       latin1Db     characterset:   latin1Client characterset:       utf8Conn.  characterset:  utf8TCP port:          3306Uptime:                 7 min 34 secThreads: 1  Questions: 29  Slow queries: 0  Opens: 112  Flush tables: 1  Open tables: 105  Queries per second avg: 0.063--------------


7. SSL + 密码 + 密钥连接

* 创建用户并指定 X509 [ SSL+密钥 ] 连接 [ MySQL 5.7后推荐使用create user 方式创建用户 ]

mysql> create user 'X509_test'@'%' identified by '123' require X509;Query OK, 0 rows affected (0.00 sec)


* 通过密码连接测试

[root@MySQL ~]# mysql -h 192.168.60.129 -uX509_test -p'123' --ssl=0mysql: [Warning] Using a password on the command line interface can be insecure.ERROR 1045 (28000): Access denied for user 'X509_test'@'192.168.60.129' (using password: YES)


* 通过 SSL +密码 连接测试

[root@MySQL ~]# mysql -h 192.168.60.129 -uX509_test -p'123' --sslmysql: [Warning] Using a password on the command line interface can be insecure.ERROR 1045 (28000): Access denied for user 'X509_test'@'192.168.60.129' (using password: YES)


* 通过 SSL + 密码+密钥连接测试

  SSL: Cipher in use is DHE-RSA-AES256-SHA 表示通过SSL连接

[root@MySQL ~]# mysql -h 192.168.60.129 -uX509_test -p'123' --ssl-cert=/data/mysql_data/client-cert.pem --ssl-key=/data/mysql_data/client-key.pem mysql: [Warning] Using a password on the command line interface can be insecure.Welcome to the MySQL monitor.  Commands end with ; or \g.Your MySQL connection id is 21Server version: 5.7.18 MySQL Community Server (GPL)Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved.Oracle is a registered trademark of Oracle Corporation and/or itsaffiliates. Other names may be trademarks of their respectiveowners.Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.mysql> \s--------------mysql  Ver 14.14 Distrib 5.7.18, for linux-glibc2.5 (x86_64) using  EditLine wrapperConnection id:             21Current database:  Current user:              X509_test@192.168.60.129SSL:                    Cipher in use is DHE-RSA-AES256-SHACurrent pager:             stdoutUsing outfile:             ''Using delimiter:   ;Server version:            5.7.18 MySQL Community Server (GPL)Protocol version:  10Connection:             192.168.60.129 via TCP/IPServer characterset:       latin1Db     characterset:   latin1Client characterset:       utf8Conn.  characterset:  utf8TCP port:          3306Uptime:                 18 min 27 secThreads: 1  Questions: 40  Slow queries: 0  Opens: 118  Flush tables: 1  Open tables: 111  Queries per second avg: 0.036--------------


8. 总结


以需求驱动技术,技术本身没有优略之分,只有业务之分。

密码 方式 用户 测试 数据 安全 密钥 文件 环境 生成 信息 数据库 网络 传输 技术 明文 加密 推荐 配置 成功 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 泉州分布式服务器加盟 广州网络安全应急指挥中心官网 怎么样删除数据库用户语句 gp 数据库 行转列 汽车保养配件数据库 服务器开机后风扇全速转无法开机 互联网最优美科技的图案设计 嵌入式软件开发工程师累吗 网络安全的特性完整性编号 培训网络技术学校 与网络安全有关政治的知识 个人通讯管理系统数据库表 韶关通信软件开发费用 简述数据库系统开发阶段 开展网络安全()等安全服务 平顶山地图软件开发 互联网技术及科技创新训练 数据库 客户端字符集设置 对软件开发行业的看法 池州医疗软件开发费用 网络安全是企业发展 软件开发项目开工令 数据库复制如何停止 储存服务器维修配件报价 数据库绘制er图的技巧 河南泓阳网络技术有限公司 东莞市掌柜网络技术有限公司 湖南美音网络技术 网络安全隐患排查工作开展情况 池州医疗软件开发费用
0