MySQL/Encrypted Connection

客户端可以与MySQL服务器加密连接,也可以非加密连接。这是采用了SSL(Secure Socket Layer:安全套接字层),利用数据加密、身份验证和消息完整性验证机制,为基于TCP等可靠连接的应用层协议提供安全性保证。

服务器Data目录下的SSL相关文件

编辑
  • ca-key.pem #CA私钥
  • ca.pem #自签的CA证书,客户端连接也需要提供
  • client-cert.pem #客户端连接服务器端需要提供的证书文件(因为安装一套服务器的bin目录总是带着一套client工具)
  • client-key.pem #客户端连接服务器端需要提供的私钥文件
  • private_key.pem #私钥/公钥对的私有成员
  • public_key.pem #私钥/公钥对的共有成员
  • server-cert.pem #服务器端证书公钥文件
  • server-key.pem #服务器端证书私钥文件

在服务器中查看是否开启了SSL连接

编辑

root登录后:

mysql>show global variables like '%ssl%';

查看用户是否用SSL连接

编辑
mysql>\s
...
SSL: Cipher in use is DHE-RSA-AES128-GCM-SHA256
...

强制指定用户必须使用SSL连接数据库

编辑
#修改已存在用户 
ALTER USER 'dba'@'%' REQUIRE SSL;
#新建必须使用SSL用户
grant select on *.* to UserName@'%' identified by 'xxx' REQUIRE SSL;

服务器启动时的相关参数

编辑

启动时关闭SSL:

mysqld --console --skip-ssl

或使用配置文件,即在 my.cnf 文件中添加如下内容: [mysqld]

实际上,如果服务器软件在默认的data文件夹发现了有效的certificate与key 文件ca.pem、server-cert.pem、server-key.pem,就会支持客户端加密连接,否则就不支持客户端加密连接。

客户端登录时的SSL参数

编辑

对于非强制SSL连接的数据库用户,登录时会先尝试SSL,失败后再尝试非加密连接。

客户端关闭SSL的登陆: mysql -h localhost -u root -p --ssl-mode=DISABLED

客户端开启SSL登陆,需要拷贝 ca-cert.pem到本地。执行:

mysql -uroot -hlocalhost -pzdh1234 --ssl-ca=/home/mysql/sslconfig/ca.pem

或使用配置文件,即在 my.cnf 文件中添加如下内容:

[client] 
ssl-ca=/home/mysql/sslconfig/ca.pem