如何为MySQL服务器和客户机启用SSL
本文来自我的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的更多相关文章
- wincc的服务器-客户机模式具体做法(全抄-未测试)
一.原来的工作方式:在同一工作组中4台计算机其windows名分别为A.B.C.D且都已安装好wincc5.0+sp2,原来在每台计算机上运行的均是单用户,4台计算机上实际运行的是一个相同的项目,最先 ...
- 最简单的服务器和客户机(python3的编码与解码问题)
在学习python的过程中,我越来越感觉到python2和python3之间有很多不同点,最近发现的一点就是编码问题. 在代码清单14-1和14-2中,因为作者是用python2来写得,然后我是用py ...
- 【计算机网络】 网络体系结构分类: 客户机/服务器体系和P2P
网络体系结构的分类 现代网络应用程序有两种主流的体系结构: 客户机/服务器体系结构和P2P体系结构(peer to peer “对等”) 一 . 客户机/服务器体系结构 客户机/服务器体系 ...
- 设置某个ip对mysql服务器有权限,以及mysql定时备份
CREATE USER 'new_username'@'211.68.%.%' IDENTIFIED BY 'password_for_new_username'; GRANT ALL ON * TO ...
- 如何配置 Oracle VirtualBox 中的客户机与物理机网络
当你在 Oracle VirtualBox 虚拟机软件 中安装了各种操作系统时,你可能需要实现物理机与虚拟机之间的相互访问. 在这篇文章中,我们将会以最简单明了的方式来说明如何配置客户机与 Linux ...
- 如何配置 VirtualBox 中的客户机与宿主机之间的网络连接
如何配置 VirtualBox 中的客户机与宿主机之间的网络连接 作者: Aaron Kili 译者: LCTT rusking | 2017-03-01 13:40 评论: 3 收藏: 3 当你 ...
- RPC 编程 使用 RPC 编程是在客户机和服务器实体之间进行可靠通信的最强大、最高效的方法之一。它为在分布式计算环境中运行的几乎所有应用程序提供基础。
RPC 编程 使用 RPC 编程是在客户机和服务器实体之间进行可靠通信的最强大.最高效的方法之一.它为在分布式计算环境中运行的几乎所有应用程序提供基础.本文介绍 RPC 客户机和服务器之间基本的事件流 ...
- jmeter连接配置带跳板机(SSH)的mysql服务器
jmeter连接配置mysql服务器时,如果数据库服务器没有通过ssh连接,则只需要配置相应的jdbc参数就可以了,即请求域名或ip地址:3306,如果数据库服务器是通过SSH连接的,那需要通过中间远 ...
- 01_Weblogic课程之概念篇:代理服务器,web服务器,应用程序服务器,JNDI概念,JTA概念,Java消息服务,Java验证和授权(JAAS),Java管理扩展,Web客户机,客户机应用程序
1 什么是服务器 Weblogic中服务器分为两种,一种是受管服务器,另外一种是管理服务器. Weblogic课程(Weblogic是Oracle公司的,最开始的是BEA公司的) 一 系统管理 ...
随机推荐
- Lytro 光场相机重对焦C++实现以及CUDA实现
前面有几篇博客主要介绍了光场和光场相机相关知识,以及重对焦效果和多视角效果的展示.算是自己学习光场过程的一种总结. 这次贴上自己用OpenCV/C++编写的重对焦算法实现(包含CPU版和CUDA GP ...
- 【编程技巧】EXTJS中Ext.grid.GridPanel配置项autoExpandColumn的使用方法
autoExpandColumn的作用是自动伸展,占满剩余区域.一般使用在列比较少,并且大多数列都比较窄,有一列比较宽的情况下,当然什么时候使用,还是得按照实际情况确定. 使用的时候主要有三点要注意的 ...
- 【视频编解码·学习笔记】3. H.264视频编解码工程JM的下载与编解码
一.下载JM工程: JM是H.264标准制定团队所认可的官方参考软件.网址如下 http://iphome.hhi.de/suehring/tml/ 从页面中可找到相应的工程源码,本次选择JM 8.6 ...
- Ajax常用实例
摘录自:http://www.cnblogs.com/gaopeng527/p/4459622.html 1. 级联下拉列表 例1.1 级联下拉列表. (1)编写AjaxRequest.js文件,并将 ...
- 如何使用mysql命令行
现在向大家介绍mysql命令行下,从数据库的建立到表数据的删除全过程,希望对网友有所帮助 方法/步骤 1.登陆mysql 打cmd命令终端,如果已经添加了mysql的环境变量,可以直接使用命令 mys ...
- 引用类型之数组array最全的详解
Array类型 今天总结一下array类型. js中的数组是有着非常强大的功能.具有很大的灵活性,有两个方面的特点 1.数组的每一项可以保存任何的数据类型:2.数组大小可以动态的调整:看下面的例子: ...
- 1.MAVEN项目的创建与问题的解决
一.创建一个maven-webapp.(环境:mac和15版本的IDEA) 二.next--->填写groupId(公司单位的名字,你组织的名字)和ArtifactID(有关tomcat,以后用 ...
- Linux 性能搜集【top/vmstat/iostat】
为方便问题发生后,问题原因的分析排查,我们可以在服务器中事先部署如下脚本,方便故障发生后,问题原因的分析排查 脚本部署方法: 1.将脚本[top_monitor.sh]上传到服务器 2.登陆虚拟机,并 ...
- js_11_dom其他
有哪些其他js? window.location.href = "跳转页面" // 不写获得本页面url,写跳转到指定页面 confirm('内容') // ...
- 11_什么是sql注入?
什么是sql注入? --因为后台会把用户输入的插入到后台的sql语句中,来进行sql查询判断用户输入是否存在数据库中, 来验证用户是否合法,就会出现一个问题,用户在做用户验证的时候,在输入框注 ...