开发者社区> memos1> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

mysql 加密连接SSL

简介: 1.SSL含义 SSL(Secure Sockets Layer 安全套接层),及其继任者传输层安全(Transport Layer Security,TLS)是为网络通信提供安全及数据完整性的一种安全协议。
+关注继续查看

1.SSL含义


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


2.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)


3.ssl加密连接对性能的影响

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


版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
MySQL8.0默认加密连接方式
Mysql8.0开始默认采用新的caching_sha2_password的身份验证方式,常规老接口会因此无法连接数据库。 为继续使用老的身份验证方式,需显式指定身份验证方式为 mysql_native_password
0 0
Mysql8.0 开启 SSL加密 mysql_ssl_rsa_setup
Mysql8.0 开启 SSL加密 mysql_ssl_rsa_setup
0 0
【mysql】加密与解密函数
【mysql】加密与解密函数
0 0
为 MySQL 客户端开启 TLS
本文主要描述了在 Kubernetes 上如何为 TiDB 集群的 MySQL 客户端开启 TLS。TiDB Operator 从 v1.1 开始已经支持为 Kubernetes 上 TiDB 集群开启 MySQL 客户端 TLS。开启步骤为: 为 TiDB Server 颁发一套 Server 端证书,为 MySQL Client 颁发一套 Client 端证书。并创建两个 Secret 对象,Secret 名字分别为:${cluster_name}-tidb-server-secret 和 ${cluster_name}-tidb-client-secret,分别包含前面创建的两套证书;
0 0
+关注
memos1
点滴积累,做好技术。
文章
问答
文章排行榜
最热
最新
相关电子书
更多
好的 MySQL 兼容可以做到什么程度
立即下载
MySQL 5.7让优化更轻松
立即下载
PostgresChina2018_张启程_为什么我们抛弃MongoDB和MySQL,选择PgSQL
立即下载