Linux配置mysql数据库SSL加密
一、SSL介绍
SSL(Secure Socket Layer:安全套接字层)利用数据加密、身份验证和消息完整性验证机制,为基于TCP等可靠连接的应用层协议提供安全性保证。
SSL协议提供的功能主要有:
1、数据传输的机密性:利用对称密钥算法对传输的数据进行加密。
2.、身份验证机制:基于证书利用数字签名方法对服务器和客户端进行身份验证,其中客户端的身份验证是可选的。
3、消息完整性验证:消息传输过程中使用MAC算法来检验消息的完整性。
如果用户的传输不是通过SSL的方式,那么其在网络中数据都是以明文进行传输的,而这给别有用心的人带来了可乘之机。所以,现在很多大型网站都开启了SSL功能。同样地,在我们数据库方面,如果客户端连接服务器获取数据不是使用SSL连接,那么在传输过程中,数据就有可能被窃取。
二、MySQL5.7 SSL启用
2.1 通过命令查看是否开启SSL
show global variables like '%ssl%';
当"have_ssl" 为YES的时候,说明数据库是已经开启支持SSL加密连接方式的。
2.2 查看当前登录连接是否是通过SSL加密方式连接
2.3 如果没有支持开启SSL,则需要在启动安装mysql_ssl_rsa_setup 使其能支持SSL 功能
若未开启,通过以下步骤:
- 关闭MySQL服务
- 运行如下命令:
mysql_ssl_rsa_setup –-data-dir=/data/mysql-ssl --uid=mysql
其中:–-data-dir:指定证书和密钥存放位置;–uid:指定所属用户 - 查看生成的密钥和证书
2.4 MySQL配置文件
强制ssl验证
在[mysqld]下添加如下代码:
require_secure_transport = ON
指定服务端密钥和证书路径
在[mysqld]下添加如下代码:
ssl-ca = /home/tools/mysql/ca.pem
ssl-cert = /home/tools/mysql/server-cert.pem
ssl-key = /home/tools/mysql/server-key.pem
指定客户端密钥和证书路径
在[client]下添加如下代码:
ssl-ca = /home/tools/mysql/ca.pem
ssl-cert = /home/tools/mysql/client-cert.pem
ssl-key = /home/tools/mysql/client-key.pem
三、配置SSL
3.1 首先登录数据库,查看安装路径
show variables like 'datadir';
3.2 知道数据库安装路径之后,查看是否生成了相关秘钥文件
ll /home/tools/mysql/*.pem
3.3 添加ssl参数到etc/my.cnf配置文件
[mysql]
ssl-ca=/var/lib/mysql/ca.pem
ssl-cert=/var/lib/mysql/client-cert.pem
ssl-key=/var/lib/mysql/client-key.pem
[mysqld]
ssl-ca=/var/lib/mysql/ca.pem
ssl-cert=/var/lib/mysql/client-cert.pem
ssl-key=/var/lib/mysql/client-key.pem
3.4 然后使用命令重启
systemctl restart mysqld
3.5 给用户设置SSL
老用户直接修改
ALTER USER 'root'@'19.130.%' REQUIRE SSL;
FLUSH PRIVILEGES;
创建新用户
GRANT ALL PRIVILEGES ON *.* TO 'ssl_test'@'%' IDENTIFIED BY 'ssl_test' REQUIRE SSL;
FLUSH PRIVILEGES;
然后在执行2.2的操作查看数据库连接是否是已经是SSL加密校验
参考文章地址:
MySQL 5.7.18 加密连接mysql_ssl_rsa_setuphttps://www.linuxidc.com/Linux/2017-10/148131.htmMySQL5.7配置SSL加密https://www.cnblogs.com/biaopei/p/13039321.html 小笔记:
https://www.linuxidc.com/Linux/2017-10/148131.htm
https://www.cnblogs.com/biaopei/p/13039321.html
查看数据库安装目录
show variables like 'datadir';
查看ssl参数状态,查看have_ssl,为YES,这表示已经开始支持SSL了
show global variables like '%ssl%';
show global status like '%ssl%';
show status like 'ssl_cipher';
\s 和 status 命令查看数据库连接信息
查看证书过期时间
SHOW STATUS LIKE 'Ssl_server_not%';
证书文件:
ca-key.pem # CA私钥
ca.pem # 自签的CA证书,客户端连接也需要提供
client-cert.pem # 客户端连接服务器端需要提供的证书文件
client-key.pem # 客户端连接服务器端需要提供的私钥文件
private_key.pem # 私钥/公钥对的私有成员
public_key.pem # 私钥/公钥对的共有成员
server-cert.pem # 服务器端证书文件
server-key.pem # 服务器端私钥文件
设置用户使用SLL登录
ALTER USER david@'%' REQUIRE SSL;
FLUSH PRIVILEGES;
数据库配置SLL
登录数据库-查看数据库安装目录
show variables like 'datadir';
1、在etc/my.cnf 文件配置
[mysql]
ssl-ca=/var/lib/mysql/ca.pem
ssl-cert=/var/lib/mysql/client-cert.pem
ssl-key=/var/lib/mysql/client-key.pem
[mysqld]
ssl-ca=/var/lib/mysql/ca.pem
ssl-cert=/var/lib/mysql/client-cert.pem
ssl-key=/var/lib/mysql/client-key.pem
2、systemctl restart mysqld 重启
然后登陆数据库查看 \s或者status
1、在 /etc/pam.d/system-auth文件配置
auth required pam_tally2.so deny=5 unlock_time=600
2、 添加环境变量
vi ~/.bashrc
export PASS_MAX_DAYS=180
export PASS_MIN_DAYS=0
export PASS_MIN_LEN=5
export PASS_WARN_AGE=7
source ~/.bashrc
echo $PASS_WARN_AGE
3、查看ssl参数状态,查看have_ssl,为YES,这表示已经开始支持SSL了
show global variables like '%ssl%';
/etc/profile
export TMOUT=600
source etc/profile
echo $TMOUT
使用修改.bashrc文件(在用户的家目录下)进行环境变量的编辑,只对当前用户有用。使用修改 /etc/profile 文件进行环境变量的编辑,是对所有用户有用。大家一定要注意区别。