zl程序教程

您现在的位置是:首页 >  数据库

当前栏目

关于mysql与sslv3的一些记录

mysql 关于 记录 一些
2023-09-11 14:22:07 时间

找了下国内关于mysql开启ssl的博文,这里整理一份备用。

  1. 关于ssl协议,主要是用对方的公钥加密信息,对方可以用它的私钥解密。当然中间种种,还有MAC等不细究了。

  2. 通信的开始,server会向client提供一份加密算法的列表,client可以选择用哪种算法加密。其中每一个加密算法叫做cipher,即加密套件。

  3. 不得不提一下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月份)。

  4. 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却发现根本连接不上。

  5. mysql使用ssl的故事从现在开始,它跟其他apache关闭sslv3的手法不一样。由于ssl版本是由client连接mysql时指定的,所以mysql服务器并不能完全关闭sslv3的支持。当然,有一种方法,就是把server中openssl支持的sslv3版本的cipher全部给删掉,这样,client就没法选择sslv3的cipher方式了。

  6. 无语的是,我用了navicat去连接mysql,中间重重阻碍后才最终连上了。幸运的是, navicat支持指定cipher,我就很happy的指定了sslv3的cipher,结果报错,所ssl connect error。试了很多种sslv3的cipher都不行,也没有原因。后来看到【4】中提到的设置SSL_MODE_SEND_FALLBACK_SCSV标记,豁然开朗,应该是navicat内部设置的这个标记。

  7. 分享一下,这次经常用的的命令:
    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';

  8. mysql设置ssl的方法在很多地方都能找到,这里就不想说了,思路是
    1)生成ssl的各种证书
    2)在mysql配置文件中配置ssl的server证书,
    3)重启mysql服务,
    4) 客户端使用client-cert, ca-cert, client-key去登录mysql服务

  9. 接着【8】说,要注意,远程访问要设置远程访问的ip权限,mysql在配置文件中要绑定ip。

  10. 指定cipher的mysql登录测试:
    mysql --ssl-cipher=SRP-RSA-3DES-EDE-CBC-SHA -e QUIT -u root -p