1 理论部分
1.1 SSL的理解
1.1.1 基本概念
SSL即Secure Socket Layer)- 安全套接字层(由Netscape提出
1.1.2 SSL的作用
SSL - 实现客户端和服务器之间的安全通讯(加密和完整性校验)
1.1.3 协议组成
1) SSL Record Protocol(记录协议)
- 建立于TCP之上
- 为高层提供数据封装、压缩、加密等基本功能
2) SSL Handshake Protocol(握手协议)
- 建立于Record Protocol协议之上
- 用户数据传输前的双方身份认证、协商加密算法、交换机密秘钥等
1.1.4 ISO层次
SSL工作于网络层和应用层之间
1.2 MySQL SSL
与包括MySQL 5.6版本在内的旧版本相比,5.7.x增加了连接加密功能,防止通讯过程中数据库信息被窃取
2 实践部分
2.1 环境配置
2.1.1 基本信息
IP Address=10.168.0.2[4-5]
HostName=hd0[1-2].cmdschool.org
注:以上隐含名称解析服务
2.1.2 防火墙配置
2.1.3 配置安装源
In hd0[1-2]
2.1.4 配置安装包
In hd01
In hd02
2.1.5 启动数据库
In hd01
2.1.6 初始化数据库
In hd01
获取临时密码:
显示如下:
初始化数据库:
向导如下:
2.1.7 关闭密码复杂度要求
In hd01
加入如下配置
重启数据库服务
注:此操作方便后面配置用户权限,降低MySQL服务对密码复杂度的要求,这也是5.7的新特征,说真的笔者认同MySQL官方的安全主张,但不喜欢(麻烦)。
验证插件的禁用
显示如下:
2.2 配置MySQL SSL
2.2.1 确保本机安装openssl
In hd0[1-2]
查询MySQL是基于那种SSL
返回如下提示:
以上表明官方的编译基于yaSSL,如果是基于openSSL,以下命令查看openSSL的版本
2.2.2 生成所需的证书
In hd01
会看到如下证书
2.2.3 MySQL配置文件中开启SSL
In hd01
加入如下配置
重启服务
2.2.4 确认是否开启SSL
In hd01
显示如下:
2.2.5 查看SSL的加密方式
In hd01
显示如下:
2.2.6 配置SSL用户
In hd01
查看是否开启强制用户使用SSL
显示如下:
注:帐号“scm@hd01.cmdschool.org”不强制使用SSL链接而“scm@hd02.cmdschool.org”被强制使用SSL链接,不使用SSL无法登陆。
2.2.7 登录测试
1) 使用SSL链接
In hd02
2) 禁用SSL链接
In hd01
3) 使用证书登录(可选,不用也能SSL登陆)
In hd01
4) 配置文件指定证书登录(可选,不用也能SSL登陆)
In hd01
输入如下配置:
2.2.8 客户端查看SSL状态
1) 从状态中查看
In hd02
显示如下:
注:正常会看到“SSL: Cipher in use is DHE-RSA-AES256-SHA”字样
2) 查看SSL版本
In hd02
显示如下:
3) 查看加密方式
In hd02
显示如下:
4) 支持的加密方式
In hd02
显示如下:
3 附录
3.1 JDBC的链接处理方式
3.1.1 错误提示(Error)
3.1.2 JDBC客户端的解决方法
连接字符串url中加入ssl=true或false:
注:本文只是笔着希望可以在MySQL的服务端解决以上错误提示而整理,如果网友有方案提供,笔者感激不尽。
参阅文档
MySQL Database
https://www.cloudera.com/documentation/enterprise/latest/topics/cm_ig_mysql.html
https://dev.mysql.com/doc/refman/5.7/en/validate-password-plugin.html
https://dev.mysql.com/doc/refman/5.7/en/secure-connection-options.html
MySQL开启SSL
https://dev.mysql.com/doc/refman/5.7/en/using-secure-connections.html