关于mysql与sslv3的一些记录
2018-01-11 11:39
543 查看
找了下国内关于mysql开启ssl的博文,这里整理一份备用。
关于ssl协议,主要是用对方的公钥加密信息,对方可以用它的私钥解密。当然中间种种,还有MAC等不细究了。
通信的开始,server会向client提供一份加密算法的列表,client可以选择用哪种算法加密。其中每一个加密算法叫做cipher,即加密套件。
不得不提一下ssl的历史,ssl有三个版本,sslv1, sslv2,sslv3,其中v1版协议详情没有公开过,sslv2只有部分,sslv3的资料应该还有些。都是很久的老古董了。我们现在说的ssl其实是ssl的升级版办tls,目前openssl的1.0.x基本上都是支持的tls.tls也有3个版本tls1.0,tls1.2,tls1.3(这个还在起草,截至到16年2月份)。
14年的爆出了sslv3的漏洞,cve-2014-3566,这个洞彻底摧毁了ssl的防线,跟着sslv2的脚步退出了历史的舞台。目前用的基本都是tls.openssl的更新日志Changes between 1.0.1i and 1.0.1j 提到,连接ssl使用SSL_set_mode(s, SSL_MODE_SEND_FALLBACK_SCSV)这个标记,强制使用tls协议。爱,想搭一个sslv3的环境,查看ubuntu server支持的cipher列表,找到的sslv3,使用sslv3对应的cipher却发现根本连接不上。
mysql使用ssl的故事从现在开始,它跟其他apache关闭sslv3的手法不一样。由于ssl版本是由client连接mysql时指定的,所以mysql服务器并不能完全关闭sslv3的支持。当然,有一种方法,就是把server中openssl支持的sslv3版本的cipher全部给删掉,这样,client就没法选择sslv3的cipher方式了。
无语的是,我用了navicat去连接mysql,中间重重阻碍后才最终连上了。幸运的是, navicat支持指定cipher,我就很happy的指定了sslv3的cipher,结果报错,所ssl connect error。试了很多种sslv3的cipher都不行,也没有原因。后来看到【4】中提到的设置SSL_MODE_SEND_FALLBACK_SCSV标记,豁然开朗,应该是navicat内部设置的这个标记。
分享一下,这次经常用的的命令:
1) 查看当前openssl所有支持的cipher.
2) 查看openssl的sslv3的cipher.
3) 查看openssl的版本
4) 验证当前服务器的是否支持某版本ssl,只要返回文本有error就是不支持
5) 查看mysql支持的ssl状态,需要进入mysql终端,
6) 查看当前mysql的cipher,
mysql设置ssl的方法在很多地方都能找到,这里就不想说了,思路是
1)生成ssl的各种证书
2)在mysql配置文件中配置ssl的server证书,
3)重启mysql服务,
4) 客户端使用client-cert, ca-cert, client-key去登录mysql服务
接着【8】说,要注意,远程访问要设置远程访问的ip权限,mysql在配置文件中要绑定ip。
指定cipher的mysql登录测试:
关于ssl协议,主要是用对方的公钥加密信息,对方可以用它的私钥解密。当然中间种种,还有MAC等不细究了。
通信的开始,server会向client提供一份加密算法的列表,client可以选择用哪种算法加密。其中每一个加密算法叫做cipher,即加密套件。
不得不提一下ssl的历史,ssl有三个版本,sslv1, sslv2,sslv3,其中v1版协议详情没有公开过,sslv2只有部分,sslv3的资料应该还有些。都是很久的老古董了。我们现在说的ssl其实是ssl的升级版办tls,目前openssl的1.0.x基本上都是支持的tls.tls也有3个版本tls1.0,tls1.2,tls1.3(这个还在起草,截至到16年2月份)。
14年的爆出了sslv3的漏洞,cve-2014-3566,这个洞彻底摧毁了ssl的防线,跟着sslv2的脚步退出了历史的舞台。目前用的基本都是tls.openssl的更新日志Changes between 1.0.1i and 1.0.1j 提到,连接ssl使用SSL_set_mode(s, SSL_MODE_SEND_FALLBACK_SCSV)这个标记,强制使用tls协议。爱,想搭一个sslv3的环境,查看ubuntu server支持的cipher列表,找到的sslv3,使用sslv3对应的cipher却发现根本连接不上。
mysql使用ssl的故事从现在开始,它跟其他apache关闭sslv3的手法不一样。由于ssl版本是由client连接mysql时指定的,所以mysql服务器并不能完全关闭sslv3的支持。当然,有一种方法,就是把server中openssl支持的sslv3版本的cipher全部给删掉,这样,client就没法选择sslv3的cipher方式了。
无语的是,我用了navicat去连接mysql,中间重重阻碍后才最终连上了。幸运的是, navicat支持指定cipher,我就很happy的指定了sslv3的cipher,结果报错,所ssl connect error。试了很多种sslv3的cipher都不行,也没有原因。后来看到【4】中提到的设置SSL_MODE_SEND_FALLBACK_SCSV标记,豁然开朗,应该是navicat内部设置的这个标记。
分享一下,这次经常用的的命令:
1) 查看当前openssl所有支持的cipher.
openssl ciphers v
2) 查看openssl的sslv3的cipher.
openssl ciphers -v|grep SSLv3
3) 查看openssl的版本
openssl version
4) 验证当前服务器的是否支持某版本ssl,只要返回文本有error就是不支持
openssl s_client -CAfile ca-cert.pem -cert client-cert.pem -key client-key.pem -cipher AES128-SHA256 -connect localhost:3306 -tls1_2
5) 查看mysql支持的ssl状态,需要进入mysql终端,
status;或者
\s
6) 查看当前mysql的cipher,
SHOW STATUS LIKE 'Ssl_cipher_list';
mysql设置ssl的方法在很多地方都能找到,这里就不想说了,思路是
1)生成ssl的各种证书
2)在mysql配置文件中配置ssl的server证书,
3)重启mysql服务,
4) 客户端使用client-cert, ca-cert, client-key去登录mysql服务
接着【8】说,要注意,远程访问要设置远程访问的ip权限,mysql在配置文件中要绑定ip。
指定cipher的mysql登录测试:
mysql --ssl-cipher=SRP-RSA-3DES-EDE-CBC-SHA -e QUIT -u root -p
相关文章推荐
- 关于MySQL的一些记录
- 关于golang使用mysql以及docker的一些坑
- 关于MFC中子对话框建立并设置背景的一些记录
- 关于Advanced Installer 11.0打包软件过程一些记录
- mysql 的一些记录的操作
- 关于mysql一些问题。
- 一些关于event的 记录
- 一些关于event的 记录
- 关于mysql中如何显示中文及在myeclipse上关联mysql等的一些小结
- 关于mysql的procedure的一些细节
- 关于C++Builder 2007使用dbexpress + mysql的一些问题
- 【转】MySQL关于日期记录
- 关于MYSQL的配置文件my.cnf 一些存放位置和配置说明
- iOS 关于NSDate的一些记录
- MyEclipse中XML的智能提示和关于Spring 配置文件头的一些记录和解释
- 关于MySql中数据库、表的操作以及增删改查等一些SQL语句注意事项
- 关于sql和mysql对于别名不能调用的一些理解
- 关于Tomcat的一些记录
- 关于IE浏览器历史记录的一些知识
- Android中关于Proguard的一些记录