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. react跳转url,跳转外链,新页面打开页面

    react中实现在js中内部跳转路由,有两种方法. 方法一: import PropTypes from 'prop-types'; export default class Header exten ...

  2. [Android] 基于 Linux 命令行构建 Android 应用(六):Android 应用签名

    Android 要求所有应用在安装前必须使用证书进行数字签名.Android 使用该证书来确定一个应用以及其作者身份,该证书不要求由证书发行机构颁发,因此 Android 应用经常使用自我签名的证书, ...

  3. [转]复制、移动和删除:cp, rm, mv

    转自:http://www.cnblogs.com/benio/archive/2010/07/27/1785929.html 要复制文件,请使用cp(copy)命令.不过,cp命令的用途很多.除了单 ...

  4. kubernetes-PetSet

    什么是Pet?Pet是一个有状态应用程序,本质上它是一个具有确定性名称以及唯一身份的Pod,身份内容包括: DNS中可以识别的固定hostname 顺序化索引(Pet名称组成:PetSetName-O ...

  5. Kafka创建Topic时如何将分区放置到不同的Broker中

    熟悉 Kafka的同学肯定知道,每个主题有多个分区,每个分区会存在多个副本,本文今天要讨论的是这些副本是怎么样放置在 Kafka集群的 Broker 中的. 大家可能在网上看过这方面的知识,网上对这方 ...

  6. 淘宝 NPM 镜像使用

    前言 因为众所周知的原因,使用node,官方NPM仓库安装依赖包是个看人品的事情,不过有万能的淘宝,所以需要部分调整就可以避免这些原因.(以下内容osx, centos下测试通过) 淘宝镜像基本使用 ...

  7. python 闭包用法

    def make_addr(addend): def addr(augend): return augend + addend return addr p = make_addr(23) q = ma ...

  8. mysql迁移sqlserver

    数据迁移的工具有很多,基本SSMA团队已经考虑到其他数据库到SQL Server迁移的需求了,所以已经开发了相关的迁移工具来支持. 此博客主要介绍MySQL到SQL Server数据迁移的工具:SQL ...

  9. IT资源关东煮第一期【来源于网络】

    IT资源关东煮第一期[来源于网络] 地址:http://geek.csdn.net/news/detail/128222

  10. 将GitLab数据库从阿里云PostgreSQL RDS迁移至自建的PostgreSQL服务器

    阿里云RDS目前支持的是PostgreSQL 9.4,而gitlab支持的最低版本是PostgreSQL 9.6.1,不升级PostgreSQL,gitlab就无法升级,阿里云RDS短期内不进行升级, ...