如何为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公司的) 一 系统管理 ...
随机推荐
- CC2650LaunchPad 运行contiki hello-world示例程序
最近做毕设,开始接触contiki. 下载并运行Instant Contiki 3.0 这是官方制作的虚拟机镜像,直接用vmware等工具就可以运行. 从这里下载. 下载并解压后,用vmware运行. ...
- Block 的使用时机
Block 一般是用来表示.简化一小段的程式码,它特别适合用来建立一些同步执行的程式片段.封装一些小型的工作或是用来做为某一个工作完成时的回传呼叫(callback) . 在新的iOS API中blo ...
- SQLITE3 使用总结(3~5)(转)
3 不使用回调查询数据库/ `- ^# T6 ?, F: H* m2 ~# ~上 面介绍的 sqlite3_exec 是使用回调来执行 select 操作.还有一个方法可以直接查询而不需要回调.但是, ...
- c指针作为参数传递以及指针的指针
指针作为函数参数传递 函数参数传递的只能是数值,所以当指针作为函数参数传递时,传递的是指针的值,而不是地址. #include "stdio.h" void pointer(int ...
- java面向对象的三大特性——封装
封装 封装从字面上来理解就是包装的意思,专业点就是信息隐藏,是指利用抽象数据类型将数据和基于数据的操作封装在一起,使其构成一个不可分割的独立实体,数据被保护在抽象数据类型的内部,尽可能地隐藏内部的细节 ...
- sping中防止定时任务多处运行解决方法
@Servicepublic class TimerJobService implements LzhTimerJobDao{ Logger logger = LoggerFactory.getLog ...
- 绕过js验证
我在火狐和谷歌下想删除对应js,由于是外部js引入的,没删掉.只好借用了工具. 这个工具也并不是多么的高大上,也许大家都用过,httprequester 步骤:打开火狐附加组件管理器——扩展——输入h ...
- linkin大话面向对象--接口
接口(interface)的概念,掌握接口很重要,以后所有的编程都要面向接口编程.其实接口的内涵就7个字:规范和实现分离. 抽象类是从多个类中抽象出来的模板,若要将这种抽象进行得更彻底,就得用到一种特 ...
- MyEclipse设置jsp页默认打开方式
可以用来设置jsp页默认打开是代码编辑模式而不是半视图半代码的模式. 1.选择菜单Window→Preferences. 2.选择General→Editors→File Associations.在 ...
- TPYBoard开发板搭建与阿里云服务发送数据
今天给大家带来的是TPYBoard V202开发板的一次测试项目使用心得.而测试项目就是给服务端发送硬件底层数据,而数据有产品名称,WF模块MAC地址,温湿度数据. 什么是MicroP ...