mysql建立ssl安全连接的配置

1、环境、IP、安装包:

centOS 5.4

虚拟机了两台服务器

mysql-5.1.48.tar.gz

openssl-0.9.8b.tar.gz

server:192.168.189.134

client:192.168.189.133

windows_client:192.168.6.82(本地电脑IP)

2、安装openssl

mkdir /test/setup

cd /test/setup

tar zxvf openssl-0.9.8b.tar.gz

cd openssl-0.9.8b

./config

make && make install

3、安装mysql

cd /test/setup

tar zxvf mysql-5.1.48.tar.gz

cd mysql-5.1.48

./configure --prefix=/usr/local/mysql --with-ssl --with-vio

make && make install

useradd mysql

 cd /usr/local/mysql

 bin/mysql_install_db --user=mysql

 chown -R mysql:mysql . 

 chown -R mysql /usr/local/mysql 

 chgrp -R mysql . 

 cp share/mysql/mysql.server /etc/init.d/mysqld 

 chmod 755 /etc/init.d/mysqld

 chkconfig --add mysqld

 

ln -s /usr/local/mysql/bin/mysqld_safe /usr/bin/mysqld_safe

ln -s /usr/local/mysql/share/mysql/mysql.server /usr/bin/mysqld

ln -s /usr/local/mysql/bin/mysql /usr/bin/mysql

ln -s /usr/local/mysql/bin/mysqldump /usr/bin/mysqldump

ln -s /usr/local/mysql/bin/mysqladmin /usr/bin/mysqladmin

ln -s /usr/local/mysql/lib/mysql /usr/lib/mysql

ln -s /usr/local/mysql/include/mysql /usr/include/mysql

echo "/usr/local/mysql/lib/mysql" >> /etc/ld.so.conf

ldconfig

 

cp /usr/local/mysql/share/mysql/my-huge.cnf  /etc/my.cnf

问题:可能碰到的问题./configure 后会报错

/bin/rm: cannot remove `libtoolt': No such file or directory 

答案链接:http://holy2010.blog.51cto.com/1086044/448630

4、开启mysql中ssl功能

登录Mysql查看

mysql> show variables like '%ssl%'; 

+---------------+----------+ 

| Variable_name | Value    | 

+---------------+----------+ 

| have_openssl  | DISABLED | 

| have_ssl      | DISABLED | 

| ssl_ca        |          | 

| ssl_capath    |          | 

| ssl_cert      |          | 

| ssl_cipher    |          | 

| ssl_key       |          | 

+---------------+----------+

如果mysql输出如上所述,那么继续操作开启ssl;如果不是,重新编译安装mysql,注意生成makefile时填写参数正确。

退出mysql,编辑/etc/my.cnf

在[mysqld]和[mysqldump]之间,加入下列配置信息:

ssl

保存后重新启动mysql,再次登录mysql

mysql -uroot -p

mysql> show variables like '%ssl%'; 

+---------------+-------+ 

| Variable_name | Value | 

+---------------+-------+ 

| have_openssl  | YES   | 

| have_ssl      | YES   | 

| ssl_ca        |       | 

| ssl_capath    |       | 

| ssl_cert      |       | 

| ssl_cipher    |       | 

| ssl_key       |       | 

+---------------+-------+ 

输出结果显示YES,现在ssl被完美启动起来了。

5、通过openssl生成证书的配置:

在server服务器上生成ssl秘钥

mkdir -p /etc/mysql/newcerts 

cd /etc/mysql/newcerts 

openssl genrsa 2048 > ca-key.pem 

openssl req -new -x509 -nodes -days 1000 -key ca-key.pem > ca-cert.pem 

openssl req -newkey rsa:2048 -days 1000 -nodes -keyout server-key.pem > server-req.pem 

openssl x509 -req -in server-req.pem -days 1000 -CA ca-cert.pem -CAkey ca-key.pem -set_serial 01 > server-cert.pem 

openssl req -newkey rsa:2048 -days 1000 -nodes -keyout client-key.pem > client-req.pem 

openssl x509 -req -in client-req.pem -days 1000 -CA ca-cert.pem -CAkey ca-key.pem -set_serial 01 > client-cert.pem

查看一下都生成了什么文件

[root@puppet newcerts]# ll /etc/mysql/newcerts 

total 64

-rw-r--r-- 1 root root 1541 Mar  8 16:36 ca-cert.pem

-rw-r--r-- 1 root root 1675 Mar  8 16:33 ca-key.pem

-rw-r--r-- 1 root root 1224 Mar  8 16:40 client-cert.pem

-rw-r--r-- 1 root root 1679 Mar  8 16:40 client-key.pem

-rw-r--r-- 1 root root 1082 Mar  8 16:40 client-req.pem

-rw-r--r-- 1 root root 1224 Mar  8 16:39 server-cert.pem

-rw-r--r-- 1 root root 1675 Mar  8 16:38 server-key.pem

-rw-r--r-- 1 root root 1082 Mar  8 16:38 server-req.pem

好了,秘钥生成了,下面需要做的是把ca-cert.pem、client-cert.pem、and client-key.pem拷贝到client服务器上,首先我们在client服务器上创建同样的文件夹。

mkdir -p /etc/mysql/newcerts

现在在主服务器上把秘钥文件拷贝到client服务器上

scp /etc/mysql/newcerts/ca-cert.pem /etc/mysql/newcerts/client-cert.pem /etc/mysql/newcerts/client-key.pem root@192.168.189.133:/etc/mysql/newcerts

继续修改主服务器上的my.cnf

在原先上面添加ssl的地方添加证书路径

ssl

ssl-ca=/etc/mysql/newcerts/ca-cert.pem

ssl-cert=/etc/mysql/newcerts/server-cert.pem

ssl-key=/etc/mysql/newcerts/server-key.pem

重启主服务器的Mysql

进入数据库为client的IP端赋权select权限:

GRANT SELECT ON *.* TO 'test1'@'client_IP' IDENTIFIED BY '111111' REQUIRE SSL;

配置clinet端的my.cnf

[mysql]下面添加证书路径

ssl-ca/etc/mysql/newcerts/ca-cert.pem

ssl-cert=/etc/mysql/newcerts/client-cert.pem

ssl-key=/etc/mysql/newcerts/client-key.pem

配置完成后,调用mysql程序运行\s或SHOW STATUS LIKE 'SSL%'命令,如果看到SSL:的信息行就说明是加密连接了。如果把SSL相关的配置写进选项文件,则默认是加密连接的。也可用mysql程序的--skip-ssl选项取消加密连接。如果用命令行方式启用加密连接可以这样写:

mysql --ssl-ca=ca-cert.pem --ssl-cert=client-cert.pem --ssl-key=client-key.pem

若是对于windows系统的client的话 

把服务器上的证书拷贝到Mysql所在的目录下SSL_key,建立SSL_key目录

my.ini中port=3306下面添加

ssl-ca="C:\wamp\mysql\SSL_key\ca-cert.pem"

ssl-cert="C:\wamp\mysql\SSL_key\client-cert.pem"

ssl-key="C:\wamp\mysql\SSL_key\client-key.pem"

重启生效 

也在服务端上为windows赋权

GRANT SELECT ON *.* TO 'test1'@'windows_client_IP' IDENTIFIED BY '111111' REQUIRE SSL;

由于是虚拟机的环境,本地这个windowsIP为192.168.189.1 而不是为实际的IP192.168.7.82赋权

6、在client端测试是否可以用证书登录server端的数据否

mysql -h192.168.189.134 -utest1 -p 

输入密码登录成功

为了证明证书是否起作用 

你配置文件中把证书的路径给去掉或则注释掉

再进行登录看是否登录

结果是没有证书登录不上

配置完毕

修改待续~~~~

有个诡异的问题:

我又另外配置了一台服务器但是生成证书后就是无效,客户端只有ssl-key=client-cert.pem这项有用,而且诡异的是 用原先机器生成的证书都是正常

本文转自 holy2009 51CTO博客,原文链接:http://blog.51cto.com/holy2010/509973

mysql建立ssl安全连接的配置的更多相关文章

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

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

  2. 关于JDBC技术中,调用MySQL中不建议在没有服务器身份验证的情况下建立SSL连接错误解决

    今天学习到了JBDC前沿:对JDBC编写步骤的封装,出现了一大串红色报错(当然,也不能叫报错,毕竟不是所有的红色都是错误eeror,) 错误如下: Establishing SSL connectio ...

  3. mysql 建立加密连接

    加密连接可提高数据的安全性,但会降低性能.要进行加密连接,必须满足以下要求: user权限表里要有相关的SSL数据列.如果安装的MySQL服务器是4.0.0版的,user权限表已包含相关的SSL数据列 ...

  4. hibernate+mysql的连接池配置

    1:连接池的必知概念    首先,我们还是老套的讲讲连接池的基本概念,概念理解清楚了,我们也知道后面是怎么回事了. 以前我们程序连接数据库的时候,每一次连接数据库都要一个连接,用完后再释放.如果频繁的 ...

  5. MySQL 使用 SSL 连接(附 Docker 例子)

    查看是否支持 SSL 首先在 MySQL 上执行如下命令, 查询是否 MySQL 支持 SSL: mysql> SHOW VARIABLES LIKE 'have_ssl'; +-------- ...

  6. Mysql使用SSL连接

    最近项目中用到了SSL连接,记录一下,环境为windows10,Mysql版本为5.6 查看是否支持 SSL 首先在 MySQL 上执行如下命令, 查询是否 MySQL 支持 SSL: mysql&g ...

  7. Java Mysql连接池配置和案例分析--超时异常和处理

    前言: 最近在开发服务的时候, 发现服务只要一段时间不用, 下次首次访问总是失败. 该问题影响虽不大, 但终究影响用户体验. 观察日志后发现, mysql连接因长时间空闲而被关闭, 使用时没有死链检测 ...

  8. 无法建立SSL连接

    在使用wget工具的过程中,当URL使用HTTPS协议时,经常出现如下错误:“无法建立SSL连接”. 这是因为wget在使用HTTPS协议时,默认会去验证网站的证书,而这个证书验证经常会失败.加上&q ...

  9. C连接MySQL数据库开发之Xcode环境配置及测试

    一.开发环境 Mac OS X 10.9.2 64位.Xcode5.1.MySQL5.5.37 64位 MySQL安装目录为:/usr/local/mysql 二.配置xcode连接mysql的编译选 ...

随机推荐

  1. uni-app的初识(01)

    1.什么是uni-app uni-app 是一个使用 Vue.js 开发所有前端应用的框架, 开发者编写一套代码, 可发布到IOS, Android, H5, 以及各种小程序(微信,百度)等多个平台. ...

  2. SQL基础系列(2)-内置函数--转载w3school

    1.    日期函数 Mssql: SELECT GETDATE() 返回当前日期和时间 SELECT DATEPART(yyyy,OrderDate) AS OrderYear, DATEPART( ...

  3. Linux的文本编辑和文本内容查看命令

    Linux的文本编辑和文本内容查看命令 1.文本编辑命令 vi:用于编辑文本文件,基本上可以分为三种模式,分别是一般模式.编辑模式.命令行模式.    一般模式:当编辑一个文件时,刚进入文件就是一般模 ...

  4. week7_简单题_C_水题_hdu_5578+F_贪心_hdu_5583

      C    HDU_5578 求字符串中所有相同字母的最小距离H. Input 实例个数T然后T行字符串字符串中仅含有小写字母.1≤T≤501≤len≤1000(len为字符串长度) Output ...

  5. mysql优化之分区

    mysql分区类型 日常开发中我们经常会遇到大表的情况,所谓的大表是指存储了百万级乃至千万级条记录的表.这样的表过于庞大,导致数据库在查询和插入的时候耗时太长,性能低下,如果涉及联合查询的情况,性能会 ...

  6. 在VS Code下配置Julia

    原来尝试用Sublime text3配置Julia,但是老是会出一些问题,所以直接在VS code下配置了 1.下载Julia 2.安装,安装过程和其他得软件安装一样,可以改变安装路径 3.安装完成后 ...

  7. redis的安装(ubuntu版本)

    1.使用apt-get命令进行安装 安装gcc依赖 root@yatces-virtual-machine:~# apt-get update root@yatces-virtual-machine: ...

  8. 详解 final 和 static

    在我们上一篇博文中提到了 fianl 这个关键字,对于这个关键字,本人在初学时也耗费了极大地心血,甚至和师兄进行了激烈的讨论,并且,在我们讨论.尝试 以及 翻阅各种资料,最终得出了合适.易懂的解释. ...

  9. 详解 NIO流

    在观看本篇博文前,建议先观看本人博文 -- <详解 IO流> NIO流: 首先,本人来介绍下什么是NIO流: 概述: Java NIO ( New IO )是从 Java 1.4 版本开始 ...

  10. Jmeter--Plugins Manager安装及常用的插件介绍

    jmeter 客户端 内置的插件管理工具Plugins Manager 1.下载地址:https://jmeter-plugins.org/install/Install/ 2.将下载的文件拷贝的你的 ...