本文来自我的github pages博客http://galengao.github.io/ 即www.gaohuirong.cn

摘要:

  • mysql5.7后有ssl新特性
  • 自己搭建mysql enterprise monitor后发现这个功能所以折腾了下

用户想要与MySQL服务器建立一条安全连接时,常常依赖VPN隧道或SSH隧道。不过,获得MySQL连接的另一个办法是,启用MySQL服务器上的SSL封装器(SSL wrapper)。这每一种方法各有其优缺点。比如说,在出现多条短时间MySQL连接的高度动态环境下,VPN或SSH隧道也许是比SSL更好的选择,因为后者建立每条连接时需要成本高昂的SSL握手计算。另一方面,如果是长时间运行的MySQL连接比较少的那些应用,基于SSL的加密可能很合理。由于MySQL服务器已经内置了SSL支持功能,你不需要实施VPN或SSH隧道之类单独的安全层,这种隧道有其自己的维护开销。
在MySQL服务器中实施SSL可以加密在服务器与客户机之间来回传输的所有数据,因而防止广域网或数据中心里面可能出现的窃听或数据嗅探行为。此外,SSL还通过SSL证书提供了身份验证机制,因而可以保护用户,远离可能出现的网络钓鱼攻击。
我们在本文中将介绍如何启用MySQL服务器上的SSL。请注意:同样过程适用于MariaDB服务器。

创建证书和秘钥

注意:创建server端和client的证书和秘钥都是在你的那个mysql 主服务器上创建的,到时把client拷贝走就行

创建server的ssl证书和秘钥

  • 检查服务器是否安装openssl
[root@github data]# openssl version
OpenSSL 1.0.1e-fips Feb
 
  • 创建一个临时目录
mkdir /data
cd /data
 
  • 创建CA私钥和证书,将创建ca-key.pem和ca-cert.pem
[root@github data]# openssl genrsa  > ca-key.pem
# 下面命令会让你输入国家 省份等一些信息,随便输入记住就行
[root@github data]# openssl req -sha1 -new -x509 -nodes -days -key ca-key.pem > ca-cert.pem
  • 为服务器创建私钥
# 这个命令会再次询问几个问题,你可以填写上一步中提供的相同答案。
[root@github data]# openssl req -sha1 -newkey rsa: -days -nodes -keyout server-key.pem > server-req.pem
 
  • 将服务器的私钥导出成RSA类型的密钥
[root@github data]# openssl rsa -in server-key.pem -out server-key.pem
 
  • 最后,使用CA证书,创建服务器证书。
[root@github data]# openssl x509 -sha1 -req -in server-req.pem -days  -CA ca-cert.pem -CAkey ca-key.pem -set_serial  > server-cert.pem
  • 完成上述步骤后在data目录下就会有
-rw-r--r--.  root  root   Jul   : ca-cert.pem
-rw-r--r--. root root Jul : ca-key.pem
-rw-r--r--. root root Jul : server-cert.pem
-rw-r--r--. root root Jul : server-key.pem
-rw-r--r--. root root Jul : server-req.pem
 

生成客户端ssl秘钥

当我们需要用客户端ssl访问本服务端时,首先我们要在本服务器上生成证书,然后拷贝到你需要用来访问的客户端

  • MySQL服务器主机上运行下列命令
# 类似服务器端配置,也会有一些国家省份等信息填写,与服务端一致就行
[root@github data]# openssl req -sha1 -newkey rsa: -days -nodes -keyout client-key.pem > client-req.pem
 
  • 我们还需要将创建的客户机私钥转换成RSA类型
[root@github data]# openssl rsa -in client-key.pem -out client-key.pem
 
  • 最后使用服务器的CA私钥和证书,创建客户机证书
[root@github data]# openssl x509 -sha1 -req -in client-req.pem -days  -CA ca-cert.pem -CAkey ca-key.pem -set_serial  > client-cert.pem
 
  • 完成上述步骤后在data目录下就会有加上服务端
-rw-r--r--.  root  root   Jul   : ca-cert.pem
-rw-r--r--. root root Jul : ca-key.pem
-rw-r--r--. root root Jul : client-cert.pem
-rw-r--r--. root root Jul : client-key.pem
-rw-r--r--. root root Jul : client-req.pem
-rw-r--r--. root root Jul : server-cert.pem
-rw-r--r--. root root Jul : server-key.pem
-rw-r--r--. root root Jul : server-req.pem

配置服务端

  • 刚开始没有配置时,mysql默认ssl没有开启如下
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 server的my.cnf
vi /etc/my.cnf
# 假如如下信息
bind-address=* ssl-ca =/data/ca-cert.pem
ssl-cert =/data/server-cert.pem
ssl-key =/data/server-key.pem [client]
ssl-ca =/data/ca-cert.pem
ssl-cert =/data/client-cert.pem
ssl-key =/data/client-key.pem
 
  • 创建有权通过SSL访问MySQL服务器的用户
mysql> GRANT ALL PRIVILEGES ON *.* TO 'ssluser'@'%' IDENTIFIED BY 'abcdef' REQUIRE SSL;
mysql> FLUSH PRIVILEGES;
 
  • 重启mysql
service mysql restart
 
  • 这时查看ssl是否开启
mysql> show variables like '%ssl%';
+---------------+-----------------------+
| Variable_name | Value |
+---------------+-----------------------+
| have_openssl | YES |
| have_ssl | YES |
| ssl_ca | /data/ca-cert.pem |
| ssl_capath | |
| ssl_cert | /data/server-cert.pem |
| ssl_cipher | |
| ssl_crl | |
| ssl_crlpath | |
| ssl_key | /data/server-key.pem |
+---------------+-----------------------+
 

至此,就成功了,

如果其他服务器客户端要ssl连接该服务端,将ca-cert.pem、client-cert.pem和client-key.pem文件拷贝到你的客户端的目录下,比如、/data下面
然后如下访问

mysql --ssl-ca=/data/ca-cert.pem --ssl-cert=/data/client-cert.pem --ssl-key=/data/client-key.pem -h 192.168.10.145 -u ssluser -p
 

原文连接 参考

如何为MySQL服务器和客户机启用SSL的更多相关文章

  1. wincc的服务器-客户机模式具体做法(全抄-未测试)

    一.原来的工作方式:在同一工作组中4台计算机其windows名分别为A.B.C.D且都已安装好wincc5.0+sp2,原来在每台计算机上运行的均是单用户,4台计算机上实际运行的是一个相同的项目,最先 ...

  2. 最简单的服务器和客户机(python3的编码与解码问题)

    在学习python的过程中,我越来越感觉到python2和python3之间有很多不同点,最近发现的一点就是编码问题. 在代码清单14-1和14-2中,因为作者是用python2来写得,然后我是用py ...

  3. 【计算机网络】 网络体系结构分类: 客户机/服务器体系和P2P

    网络体系结构的分类 现代网络应用程序有两种主流的体系结构: 客户机/服务器体系结构和P2P体系结构(peer to peer “对等”)   一 . 客户机/服务器体系结构     客户机/服务器体系 ...

  4. 设置某个ip对mysql服务器有权限,以及mysql定时备份

    CREATE USER 'new_username'@'211.68.%.%' IDENTIFIED BY 'password_for_new_username'; GRANT ALL ON * TO ...

  5. 如何配置 Oracle VirtualBox 中的客户机与物理机网络

    当你在 Oracle VirtualBox 虚拟机软件 中安装了各种操作系统时,你可能需要实现物理机与虚拟机之间的相互访问. 在这篇文章中,我们将会以最简单明了的方式来说明如何配置客户机与 Linux ...

  6. 如何配置 VirtualBox 中的客户机与宿主机之间的网络连接

    如何配置 VirtualBox 中的客户机与宿主机之间的网络连接 作者: Aaron Kili 译者: LCTT rusking | 2017-03-01 13:40   评论: 3 收藏: 3 当你 ...

  7. RPC 编程 使用 RPC 编程是在客户机和服务器实体之间进行可靠通信的最强大、最高效的方法之一。它为在分布式计算环境中运行的几乎所有应用程序提供基础。

    RPC 编程 使用 RPC 编程是在客户机和服务器实体之间进行可靠通信的最强大.最高效的方法之一.它为在分布式计算环境中运行的几乎所有应用程序提供基础.本文介绍 RPC 客户机和服务器之间基本的事件流 ...

  8. jmeter连接配置带跳板机(SSH)的mysql服务器

    jmeter连接配置mysql服务器时,如果数据库服务器没有通过ssh连接,则只需要配置相应的jdbc参数就可以了,即请求域名或ip地址:3306,如果数据库服务器是通过SSH连接的,那需要通过中间远 ...

  9. 01_Weblogic课程之概念篇:代理服务器,web服务器,应用程序服务器,JNDI概念,JTA概念,Java消息服务,Java验证和授权(JAAS),Java管理扩展,Web客户机,客户机应用程序

     1 什么是服务器 Weblogic中服务器分为两种,一种是受管服务器,另外一种是管理服务器. Weblogic课程(Weblogic是Oracle公司的,最开始的是BEA公司的) 一 系统管理 ...

随机推荐

  1. CSS基础--常用样式

    一.背景相关 背景颜色 background-color :颜色名称/rgb值/十六进制值 背景图片 background-image :url('') 背景图片平铺方式 background-rep ...

  2. 实现鼠标hover动画效果自己理解的两种方法——练习笔记

    练习前端技术学院的任务,需要实现"导航栏中的链接,随着鼠标悬浮的位置,相应的链接下出现红色线段"的效果(如图1),我的理解有简易与稍显复杂一些的方法: 首先想到的就是直接利用伪元素 ...

  3. List Set Map 的区别 用法以及特点(转载)

    List,Set,Map是否继承自Collection接口?  答:List,Set是,Map不是. Collection是最基本的集合接口,一个Collection代表一组Object,即Colle ...

  4. winform程序压缩文件上传,服务器端asp.net mvc进行接收解压

    期间编程没什么难度,唯一可能忽略导致结果失败是asp.net  mvc配置 对于压缩文件大的话,需要配置mvc的最大接收量: <system.web> <httpRuntime ma ...

  5. X86寄存器全称

    body, table{font-family: 微软雅黑; font-size: 13.5pt} table{border-collapse: collapse; border: solid gra ...

  6. elasticsearch的集中常见操作

    1.引入dependency <dependency> <groupId>org.springframework.data</groupId> <artifa ...

  7. 我的踩坑之旅-代码不规范引发的“bug”

    今早公司上班,老大跟我说有一个服务老是上线,下线,问我啥情况.我回想了下我的项目部署,觉得不可能会出现这个问题呀.然后各种鼓捣,倒腾了一个早上,终于找出了罪魁祸首. 场景:我们的服务部署在亚马逊上.我 ...

  8. 02_HTML5+CSS详解第三天

    WebStorage简单的网页留言板用到的函数有3个1.saveStorage函数使用"new Date().getTime()"语句来获取当前的日期和时间戳,然后使用localS ...

  9. thinkphp5踩坑之部署到服务器模板不存在

    一个项目部署到Linux服务器上去的时候,发现某些模板竟然会报错说"模板不存在:/Application/Admin/-.", 解决方法:网上有说是因为使用$this->fe ...

  10. lvs_dr

    lvs_dr 实验需求(4台虚拟机) eth0 192.168.1.110 单网卡 client(可以使用windows浏览器代替,但会有缓存影响) eth0 192.168.1.186 单网卡 di ...