MySQL 5.7 的SSL加密方法

MySQL 5.7.6或以上版本

(1)创建证书开启SSL验证
--安装openssl
yum install -y openssl
openssl version
OpenSSL 1.0.1e-fips 11 Feb 2013

--安装证书
/usr/local/mysql/bin/mysql_ssl_rsa_setup   --datadir=/data/mysql/mysql3306/data

--修改权限
chown -R mysql:mysql /data/mysql/mysql3306/data

pwd
/data/mysql/mysql3306/data
[root@VM_45_133_centos Wed Jun 28 10:51:22 data]# ll
total 1024072
-rw-r----- 1 mysql mysql         56 Jun 19 17:56 auto.cnf
-rw------- 1 root  root        1679 Jun 28 10:48 ca-key.pem
-rw-r--r-- 1 root  root        1074 Jun 28 10:48 ca.pem
-rw-r--r-- 1 root  root        1078 Jun 28 10:48 client-cert.pem
-rw------- 1 root  root        1679 Jun 28 10:48 client-key.pem
-rw-r----- 1 mysql mysql        672 Jun 28 10:47 ib_buffer_pool
-rw-r----- 1 mysql mysql 1048576000 Jun 28 10:47 ibdata1
drwxr-x--- 2 mysql mysql       4096 Jun 19 17:57 mysql
drwxr-x--- 2 mysql mysql       4096 Jun 19 17:57 performance_schema
-rw------- 1 root  root        1679 Jun 28 10:48 private_key.pem
-rw-r--r-- 1 root  root         451 Jun 28 10:48 public_key.pem
drwxr-x--- 2 mysql mysql       4096 Jun 23 10:48 school
-rw-r--r-- 1 root  root        1078 Jun 28 10:48 server-cert.pem
-rw------- 1 root  root        1675 Jun 28 10:48 server-key.pem
drwxr-x--- 2 mysql mysql      12288 Jun 19 17:57 sys
-rw-r----- 1 mysql mysql        418 Jun 20 14:14 VM_45_133_centos.log

客户端连接需要的证书,当然不用证书也是可以的
-rw-r--r-- 1 root  root        1074 Jun 28 10:48 ca.pem
-rw-r--r-- 1 root  root        1078 Jun 28 10:48 client-cert.pem
-rw------- 1 root  root        1679 Jun 28 10:48 client-key.pem
-rw------- 1 root  root        1679 Jun 28 10:48 private_key.pem

服务器上的证书
-rw-r--r-- 1 root  root        1074 Jun 28 10:48 ca.pem
-rw------- 1 root  root        1679 Jun 28 10:48 ca-key.pem
-rw-r--r-- 1 root  root         451 Jun 28 10:48 public_key.pem
-rw-r--r-- 1 root  root        1078 Jun 28 10:48 server-cert.pem
-rw------- 1 root  root        1675 Jun 28 10:48 server-key.pem

--修改my.cnf
#########SSL#############
ssl-ca = /data/mysql/mysql3306/data/ca.pem
ssl-cert = /data/mysql/mysql3306/data/server-cert.pem
ssl-key = /data/mysql/mysql3306/data/server-key.pem

(2)重启mysql
/etc/init.d/mysql stop
/etc/init.d/mysql start

--查看ssl参数状态,查看have_ssl,为YES,这表示已经开始支持SSL了
show global variables like '%ssl%';
+---------------+--------------------------------------------+
| Variable_name | Value                                      |
+---------------+--------------------------------------------+
| have_openssl  | YES                                        |
| have_ssl      | YES                                        |
| ssl_ca        | /data/mysql/mysql3306/data/ca.pem          |
| ssl_capath    |                                            |
| ssl_cert      | /data/mysql/mysql3306/data/server-cert.pem |
| ssl_cipher    |                                            |
| ssl_crl       |                                            |
| ssl_crlpath   |                                            |
| ssl_key       | /data/mysql/mysql3306/data/server-key.pem  |
+---------------+--------------------------------------------+

show global status like '%ssl%';
+--------------------------------+--------------------------+
| Variable_name                  | Value                    |
+--------------------------------+--------------------------+
| Com_show_processlist           | 0                        |
| Ssl_accept_renegotiates        | 0                        |
| Ssl_accepts                    | 0                        |
| Ssl_callback_cache_hits        | 0                        |
| Ssl_cipher                     |                          |
| Ssl_cipher_list                |                          |
| Ssl_client_connects            | 0                        |
| Ssl_connect_renegotiates       | 0                        |
| Ssl_ctx_verify_depth           | 0                        |
| Ssl_ctx_verify_mode            | 0                        |
| Ssl_default_timeout            | 0                        |
| Ssl_finished_accepts           | 0                        |
| Ssl_finished_connects          | 0                        |
| Ssl_server_not_after           | Jun 26 02:48:05 2027 GMT |
| Ssl_server_not_before          | Jun 28 02:48:05 2017 GMT |
| Ssl_session_cache_hits         | 0                        |
| Ssl_session_cache_misses       | 0                        |
| Ssl_session_cache_mode         | Unknown                  |
| Ssl_session_cache_overflows    | 0                        |
| Ssl_session_cache_size         | 0                        |
| Ssl_session_cache_timeouts     | 0                        |
| Ssl_sessions_reused            | 0                        |
| Ssl_used_session_cache_entries | 0                        |
| Ssl_verify_depth               | 0                        |
| Ssl_verify_mode                | 0                        |
| Ssl_version                    |                          |
+--------------------------------+--------------------------+

查看SSL的加密方式
show global variables like 'tls_version';
+---------------+---------------+
| Variable_name | Value         |
+---------------+---------------+
| tls_version   | TLSv1,TLSv1.1 |
+---------------+---------------+

(3)配置SSL用户
取消ssl验证
grant all privileges on *.* to abcssl@'%' identified by '123456' require none;
alter user abcssl@'%' require none;
--强制ssl验证,即使设置了强制ssl,在登录时候使用--ssl-mode=disable依然可以避开ssl验证
grant all privileges on *.* to abcssl@'%' identified by '123465' require ssl;
alter user abcssl@'%' require ssl;

查看是否开启强制用户使用SSL
select user,host,ssl_type,ssl_cipher  from mysql.user;
+-----------+-----------+----------+------------+
| user      | host      | ssl_type | ssl_cipher |
+-----------+-----------+----------+------------+
| root      | %         |          |            |
| mysql.sys | localhost |          |            |
| abcssl    | %         | ANY      |            |
+-----------+-----------+----------+------------+

(4)连接数据库的时候,带上SSL
不指定客户端证书方式
5.6
--ssl、--disable-ssl、--skip-ssl:在mysql5.7是将被废弃的选项,将来版本不再支持,建议使用--ssl-mode选项,
/usr/local/mysql/bin/mysql -uroot -p -h127.0.0.1 --ssl  默认为1
/usr/local/mysql/bin/mysql -uroot -p -h127.0.0.1 --ssl=0
/usr/local/mysql/bin/mysql -uroot -p -h127.0.0.1 --ssl=1  默认为1
/usr/local/mysql/bin/mysql -uroot -p -h127.0.0.1 --disable-ssl
/usr/local/mysql/bin/mysql -uroot -p -h127.0.0.1 --skip-ssl

5.7
/usr/local/mysql/bin/mysql -uroot -p -h127.0.0.1 --ssl-mode=disable
/usr/local/mysql/bin/mysql -uroot -p -h127.0.0.1 --ssl-mode=required  默认required

从另一台机器连接过去也可以ssl加密,表明不需要安装客户端证书的
/usr/local/mysql/bin/mysql -uroot -p -h10.105.45.133 --ssl-mode=required

指定客户端证书方式,5.6的方式,5.7也可以用
/usr/local/mysql/bin/mysql --ssl-ca=/data/mysql/mysql3306/data/ca.pem \
--ssl-cert=/data/mysql/mysql3306/data/client-cert.pem \
--ssl-key=/data/mysql/mysql3306/data/client-key.pem \
-uroot -p -h127.0.0.1

(5)连接验证连接是否用了ssl
\s == status
--------------
/usr/local/mysql/bin/mysql  Ver 14.14 Distrib 5.7.18, for linux-glibc2.5 (x86_64) using  EditLine wrapper  客户端版本

Connection id:        69
Current database:    
Current user:        root@127.0.0.1
SSL:            Cipher in use is DHE-RSA-AES256-SHA
Current pager:        stdout
Using outfile:        ''
Using delimiter:    ;
Server version:        5.7.18-log MySQL Community Server (GPL)
Protocol version:    10
Connection:        127.0.0.1 via TCP/IP
Server characterset:    utf8mb4
Db     characterset:    utf8mb4
Client characterset:    utf8
Conn.  characterset:    utf8
TCP port:        3306
Uptime:            28 min 14 sec

Threads: 2  Questions: 1755  Slow queries: 0  Opens: 114  Flush tables: 1  Open tables: 102  Queries per second avg: 1.036
--------------

JDBC客户端的解决方法
连接字符串url中加入ssl=true或false:
url=jdbc:mysql://127.0.0.1:3306/framework?characterEncoding=utf8&useSSL=true

MySQL 5.7 的SSL加密方法的更多相关文章

  1. MySQL(MariaDB)的 SSL 加密复制

    背景: 在默认的主从复制过程或远程连接到MySQL/MariaDB所有的链接通信中的数据都是明文的,在局域网内连接倒问题不大:要是在外网里访问数据或则复制,则安全隐患会被放大很多.由于项目要求需要直接 ...

  2. MySQL的SSL加密连接与性能开销

    本文转载自:http://www.innomysql.net/article/23959.html(只作转载, 不代表本站和博主同意文中观点或证实文中信息) Contents [hide] 1 前言 ...

  3. .net mvc 站点自带简易SSL加密传输 Word报告自动生成(例如 导出数据库结构) 微信小程序:动画(Animation) SignalR 设计理念(一) ASP.NET -- WebForm -- ViewState ASP.NET -- 一般处理程序ashx 常用到的一些js方法,记录一下 CryptoJS与C#AES加解密互转

    .net mvc 站点自带简易SSL加密传输   因项目需要,传输数据需要加密,因此有了一些经验,现简易抽出来分享! 请求:前端cryptojs用rsa/aes 或 rsa/des加密,后端.net ...

  4. LNMP安装Let’s Encrypt 免费SSL证书方法:自动安装与手动配置Nginx

    前几天介绍了最新StartSSL免费SSL申请与配置,很多人看到部落介绍SSL证书安装时总是推荐了OneinStack,因为OneinStack提供了一键添加和配置Let's Encrypt 免费SS ...

  5. MySQL/MariaDB数据库的复制加密

      MySQL/MariaDB数据库的复制加密 作者:尹正杰  版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.MySQL的安全问题 1>.基于SSL复制 在默认的主从复制过程或远程连接 ...

  6. linux下使用vsftp搭建FTP服务器:匿名登录,账号登录,SSL加密传输

    目录 一.关于FTP和VSFTP 二.ftp.sftp.vsftp.vsftpd的区别 三.项目一:搭建一台所有人都可以访问的通用FTP服务器 3.1 项目要求 3.2 项目思路分析 3.3 使用vs ...

  7. Self Host WebApi服务传输层SSL加密(服务器端+客户端调用)

    接上篇<WebApi服务URI加密及验证的两种方式>,在实际开发中,仅对URI进行加密是不够的,在传输层采用SSL加密也是必须的. 如果服务寄宿于IIS,那对传输层加密非常简单仅需要配置一 ...

  8. Java中常用的加密方法(JDK)

    加密,是以某种特殊的算法改变原有的信息数据,使得未授权的用户即使获得了已加密的信息,但因不知解密的方法,仍然无法了解信息的内容.大体上分为双向加密和单向加密,而双向加密又分为对称加密和非对称加密(有些 ...

  9. Centos下忘记mysql的root密码的解决方法

    Centos下忘记mysql的root密码的解决方法 一:(停掉正在运行的mysql) [root@NetDakVPS ~]# service mysql stop 二:使用 “--skip-gran ...

随机推荐

  1. 在linux中安装字体

    https://blog.csdn.net/wangxintong_1992/article/details/81194896

  2. android 编程之 PopupWindow 窗口的弹出

    PopupWindow 是一个可以显示在当前 Activity 之上的浮动容器,PopupWindow 弹出的位置是能够改变的,按照有无偏移量,可以分为无偏移和有偏移两种:按照参照对象的不同又可以分为 ...

  3. 创建预编译头 Debug 正常 Release Link Error:预编译头已存在,使用第一个 PCH

    创建预编译头 Debug 正常 Release Link Error Main.obj : error LNK2005: ___@@_PchSym_@00@UmfilkilqUdrmzkkUkilqU ...

  4. VI/VIM 无法使用系统剪贴板(clipboard)?(Ubuntu&Mac OS X已解决)

    在 Ubuntu/Mac OS X 中使用VI/VIM时,发现无法使用系统的剪贴板. Ubuntu 上网一查,原来是少装了几个东西. 使用如下命令,安装相关的包.安装成功后,就可以使用系统剪贴板了. ...

  5. ubuntu上安装docker

    author : headsen chen date : 2019-03-06  16:36:12 apt-get remove docker docker-engine docker-ce dock ...

  6. 关于思科C2950交换机清除密码,恢复初始配置的方法

    上个月河南做项目,因需要大批量的对服务器进行操作系统的安装,于是想到了PXE网络批量安装, 好不容易到机房的仓库找到网线及一台思科交换机,但到安装的时候,发现思科交换机里应该有配置了 通过配置线连接交 ...

  7. RPM二进制包软件安装

    通过rpm –qa查找已安装的软件包 如果想精确查找某一软件,可以通过管道命令grep来实现 精确查找rpm –qa |grep关键词 如  rpm –qa |grep   vim 卸载已安装rpm包 ...

  8. easyui---combogrid

    选择一个数据表格某行记录 依赖panel 和datagrid combogrid:<select id="cc" name="dept" style=&q ...

  9. lombok安装方法

    一.介绍 lombok网址:https://projectlombok.org/download.html lombok能够在编译源码的时候自动生成getter和setter方法.即它最终能够达到的效 ...

  10. imu_tk标定算法原理

    imu_tk代码地址 https://bitbucket.org/alberto_pretto/imu_tk II. S ENSOR E RROR M ODEL 对于理想的IMU,加速度计三元组的3个 ...