如何设置Mysql 加密连接SSL

一、SSL含义

SSL(Secure Sockets Layer 安全套接层),及其继任者传输层安全(Transport Layer Security,TLS)是为网络通信提供安全及数据完整性的一种安全协议。TLS与SSL在传输层对网络连接进行加密。

二、mysql5.7SSL配置和使用

注意:这种方法只使用5.7,mysql5.6也支持ssl加密连接,但是配置过程比较复杂,需要用到openssl命令来创建各类共秘钥。

我的测试环境默认没有启用SSL,状态为disabled

mysql> show variables like '%ssl%';

+---------------+----------+

| Variable_name | Value |

+---------------+----------+

| have_openssl | DISABLED |

| have_ssl | DISABLED |

| ssl_ca | |

| ssl_capath | |

| ssl_cert | |

| ssl_cipher | |

| ssl_crl | |

| ssl_crlpath | |

| ssl_key | |

+---------------+----------+

可以通过执行命令mysql_ssl_rsa_setup创建pem文件:

[root@Darren1 ~]# cd /usr/local/mysql/bin/

[root@Darren1 bin]# ./mysql_ssl_rsa_setup

Generating a 2048 bit RSA private key

.................................................................................................+++

................................+++

writing new private key to 'ca-key.pem'

Generating a 2048 bit RSA private key

......................................+++

.+++

writing new private key to 'server-key.pem'

Generating a 2048 bit RSA private key

........................................................................................................................................+++

......+++

writing new private key to 'client-key.pem'

运行完命令mysql_ssl_rsa_setup后会发现数据目录下多出了一些以pem结尾的文件,而这些文件就是开启SSL连接所需要的文件:

[root@Darren1 data]# ll *.pem

-rw------- 1 root root 1679 Nov 26 05:56 ca-key.pem

-rw-r--r-- 1 root root 1074 Nov 26 05:56 ca.pem

-rw-r--r-- 1 root root 1078 Nov 26 05:56 client-cert.pem

-rw------- 1 root root 1679 Nov 26 05:56 client-key.pem

-rw------- 1 root root 1679 Nov 26 05:56 private_key.pem

-rw-r--r-- 1 root root 451 Nov 26 05:56 public_key.pem

-rw-r--r-- 1 root root 1078 Nov 26 05:56 server-cert.pem

-rw------- 1 root root 1675 Nov 26 05:56 server-key.pem

新创建的文件属于root用户,需要改变所有者和所属组,然后重启服务:

[root@Darren1 data]# chown -R mysql:mysql data/

[root@Darren1 ~]# /etc/init.d/mysqld restart

mysql> show variables like '%ssl%';

+---------------+-----------------+

| Variable_name | Value |

+---------------+-----------------+

| have_openssl | YES |

| have_ssl | YES |

| ssl_ca | ca.pem |

| ssl_capath | |

| ssl_cert | server-cert.pem |

| ssl_cipher | |

| ssl_crl | |

| ssl_crlpath | |

| ssl_key | server-key.pem |

+---------------+-----------------+

指定IP,通过网络登陆测试:

[root@Darren1 ~]# mysql -uroot -p147258 -h192.168.91.5

mysql>\s

mysql Ver 14.14 Distrib 5.7.14, for linux-glibc2.5 (x86_64) using EditLine wrapper

Connection id: 10

Current database:

Current user: root@Darren1

SSL: Cipher in use is DHE-RSA-AES256-SHA

......

本地客户端登陆,没指定IP,默认是不需要SSL加密:

[root@Darren1 ~]# mysql -uroot -p147258 -hlocalhost

mysql>\s

mysql Ver 14.14 Distrib 5.7.14, for linux-glibc2.5 (x86_64) using EditLine wrapper

Connection id: 12

Current database:

Current user: root@localhost

SSL: Not in use

......

mysql5.7用户连接默认是使用ssl加密的,也可以用--ssl=0(mysql5.7也可以用--ssl-mode=dibaled)强制用户不使用ssl加密:

[root@Darren1 ~]# mysql -ucdhu4 -p147258 -h192.168.91.5 --ssl=0

或者:

[root@Darren1 ~]# mysql -ucdhu4 -p147258 -h192.168.91.5 --ssl-mode=disabled

mysql>\s

mysql Ver 14.14 Distrib 5.7.14, for linux-glibc2.5 (x86_64) using EditLine wrapper

Connection id: 18

Current database:

Current user: cdhu4@Darren1

SSL: Not in use

......

若在创建用户时,希望该用户每次必须通过SSL方式,则需在通过REQUIRE SSL来进行设置:

mysql>alter user cdhu5@'%' require ssl;

此时指定ssl=0(或者ssl_mode=disabled)则会报错1045:

[root@Darren1 ~]# mysql -ucdhu5 -p147258 -h192.168.91.5 --ssl=0

ERROR 1045 (28000): Access denied for user 'cdhu5'@'Darren1' (using password: YES)

三、ssl加密连接对性能的影响

开启ssl加密连接是性能必然会下降,性能开销在25%左右, 另外,由于SSL开销较大的环节在建立连接,所以短链接的开销可能会更大,因此推荐使用长连接或者连接池的方式来减小SSL所带来的额外开销,不过好在MySQL的应用习惯大部分也是长连接的方式。

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏做全栈攻城狮

React Native APP签名打包release版本APK

首先React Native开发的APP是无法通过Android Studio进行打包的,因为AS打包的APK,也是和debug版本一样,需要进行依托local...

22620
来自专栏JMCui

Jenkins修改管理员密码.

前言:Jenkins修改管理员密码,我看了网上所有的教程,竟然全都是拿着一串已经加密好的111111的密文去替代config.xml文件里面的密码,然后大家的...

37940
来自专栏三丰SanFeng

github 提交报403 forbidden的错误解决

创建本地仓库与github的传输 这里假设你的仓库地址为/user/test.git,email地址为youremail@example.com,使用的时候替换...

528100
来自专栏LhWorld哥陪你聊算法

【Azkaban搭建】---Azkaban 3.25.0搭建细则 超实用

Azkaban是一个工作流调度工具,因为需要各个任务之间有依赖关系,传统的Crontab 任务已经不能满足。

17650
来自专栏owent

接入letsencrypt+全面启用HTTP/2

之前我的域名只有owent.net和www.owent.net买了SSL证书,现在有letsencrypt可以拿到免费的SSL签证,就稍微花了点时间把我的域名的...

11020
来自专栏IT杂记

使用Nginx代理restful实现SSL链路加密

1 目标说明 1.1 调研目的 本次调研主要为了解决两个问题: 不需要对restful的web容器做任何配置,实现对restful链路进行加密; 方便restf...

27190
来自专栏小狼的世界

如何使用GunPGP加密Apple Mail的邮件

我和火星人也很好奇如何能够更安全的传输邮件,所以决定试一试。他的环境是 Linux Ubuntu ,我的环境是 Mac OS X Lion。

17630
来自专栏黑白安全

如何在Kali Linux上发动DDOS攻击

Paylod:https://github.com/Ha3MrX/DDos-Attack

7.2K20
来自专栏JavaEE

spring整合kaptcha验证码kaptcha简介:开发工具及使用的核心技术:正式开始:

528130
来自专栏运维

DDOS Deflate防轻型DDOS***

DDoS deflate是一款免费的用来防御和减轻DDoS***的脚本。它通过netstat监测跟踪创建大量网络连接的IP地址,在检测到某个结点超过预设的限 ...

23840

扫码关注云+社区

领取腾讯云代金券