关于mysql与sslv3的一些记录
找了下国内关于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.
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加锁过程详解(3)-关于mysql 幻读理解
- (转)Amoeba for MySQL 非常好用的mysql集群软件
- mysql 设置 row格式binlog_为什么要把MySQL的binlog格式修改为row
- Sqoop2 将hdfs中的数据导出到MySQL
- Visual Studio 2017 - Windows应用程序打包成exe文件(2)- Advanced Installer 关于Newtonsoft.Json,LINQ to JSON的一个小demo mysql循环插入数据、生成随机数及CONCAT函数 .NET记录-获取外网IP以及判断该IP是属于网通还是电信 Guid的生成和数据修整(去除空格和小写字符)
- 【MySQL高级】Mysql并发参数调整及常用SQL技巧
- 会员中心通过AJAX、JSON、PHP、MySql等技术实现注册和登录功能(1+X Web前端开发中级 例题)——初稿
- MySQL 8 中的数据类型转换 | 学习函数CAST() 和 CONVERT()
- 一些关于MySQL的数值函数使用心得
- MySQL使用初步—mysql数据库的基本命令
- MySql导入CSV文件或制表符分割的文件
- Brew 卸载MySql以及安装Mysql
- 【MySQL进阶-03】深入理解mysql的索引分类,覆盖索引,覆盖索引失效,回表,MRR
- 读取mysql数据库的数据,转为json格式
- 基于SSM(spring+springmvc+mybatis)+MySQL开发的新闻推荐系统【100010074】
- mysql只更新日期不更新时分秒,Mysql取30天内每天最大的数据
- mac ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)
- 转 【MySQL】常用拼接语句 shell 下执行mysql 命令
- ubuntu16.04系统彻底卸载mysql,并源码免编译重装MySQL的步骤
- MySQL中的binlog相关命令和恢复技巧
- MySQL-----锁
- 关于Java读取mysql中date类型字段默认值'0000-00-00'的问题
- 小知识随手记(十):多重重复解构对象、es6函数带默认参数时将生成声明作用域、一些注意点、动态设置getter/setter、mysql将字符串字段转为数字排序或比大小、pointer-events:none;属性
- 在centos中php 在连接mysql的时候,出现Can't connect to MySQL server on 'XXX' (13)
- PostgreSQL通过mysql_fdw访问MySQL数据库
- Spring Boot 2 + jpa + mysql例子
- 【转】MySQL Utilities,mysql工具包
- MySQL自学笔记(零基础到考试6天)
- Mysql中出现please use mysql_upgrade to fix this errot解决的办法
- 【转】一个诡异的MySQL查询超时问题,居然隐藏着存在了两年的BUG
- 【MySQL】CentOS7安装MySQL数据库及MariaDB
- Eclipse中使用MySql遇到:Loading class `com.mysql.jdbc.Driver'. This is deprecated. The new driver class is `com.mysql.cj.jdbc.Driver'. The driver is automatically registered via the SPI and manual loading o
- Mysql 1290 - The MySQL server is running with the --secure-file-priv option
- python封装一个工具类 ,对MySQL数据库增删改查,可多字段动态插入mysql数据库中
- mysql面试题
- 数据库系统原理课程总结1——基本概念,业务背景,ER图,完整性约束,MySQL软件安装