mysql建立ssl安全连接的配置

本文涉及的产品
RDS MySQL DuckDB 分析主实例,集群系列 4核8GB
RDS MySQL DuckDB 分析主实例,基础系列 4核8GB
RDS DuckDB + QuickBI 企业套餐,8核32GB + QuickBI 专业版
简介:

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


相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
相关文章
|
11月前
|
关系型数据库 MySQL 分布式数据库
安全可靠的PolarDB V2.0 (兼容MySQL)产品能力及应用场景
PolarDB分布式轻量版采用软件输出方式,能够部署在您的自主环境中。PolarDB分布式轻量版保留并承载了云原生数据库PolarDB分布式版技术团队深厚的内核优化成果,在保持高性能的同时,显著降低成本。
786 140
|
网络安全 数据库
YashanDB HA节点间SSL连接配置
本指南介绍HA内部节点链路的SSL连接配置,包括客户端监听与HA节点自身监听两种方式。需使用OpenSSL工具生成证书,具体步骤参考数据库服务端SSL连接配置文档。此外,还需在数据库中开启HA的SSL连接开关并设置证书路径(仅支持绝对路径,长度≤254字节),最后重启数据库以完成配置。确保服务器已安装所需工具,详细操作请查阅相关文档。
YashanDB HA节点间SSL连接配置
|
关系型数据库 MySQL Java
【YashanDB知识库】原生mysql驱动配置连接崖山数据库
【YashanDB知识库】原生mysql驱动配置连接崖山数据库
【YashanDB知识库】原生mysql驱动配置连接崖山数据库
|
安全 网络安全 数据库
YashanDB分布式节点间SSL连接配置
本文介绍YashanDB分布式节点间SSL连接配置方法,确保通信安全。需统一为整个集群配置SSL,使用相同根证书签名的服务器证书,否则可能导致连接失败或数据库无法启动。文章详细说明了使用OpenSSL生成根证书、服务器私钥、证书及DH文件的步骤,并指导如何将证书分发至各节点。最后,通过配置数据库参数(如`din_ssl_enable`)并重启集群完成设置。注意,证书过期需重新生成以保障安全性。
|
安全 Linux 网络安全
YashanDB数据库服务端SSL连接配置
YashanDB支持通过SSL连接确保数据传输安全,需在服务端生成根证书、服务器证书及DH文件,并将根证书提供给客户端以完成身份验证。服务端配置包括使用OpenSSL工具生成证书、设置SSL参数并重启数据库;客户端则需下载根证书并正确配置环境变量与`yasc_env.ini`文件。注意:启用SSL后,所有客户端必须持有根证书才能连接,且SSL与密码认证独立运行。
|
9月前
|
Ubuntu 安全 关系型数据库
安装与配置MySQL 8 on Ubuntu,包括权限授予、数据库备份及远程连接指南
以上步骤提供了在Ubuntu上从头开始设置、配置、授权、备份及恢复一个基础但完整的MySQL环境所需知识点。
1011 7
|
9月前
|
SQL 监控 关系型数据库
查寻MySQL或SQL Server的连接数,并配置超时时间和最大连接量
以上步骤提供了直观、实用且易于理解且执行的指导方针来监管和优化数据库服务器配置。务必记得,在做任何重要变更前备份相关配置文件,并确保理解每个参数对系统性能可能产生影响后再做出调节。
823 11
|
Ubuntu 关系型数据库 MySQL
在Ubuntu 22.04上配置和安装MySQL
以上就是在Ubuntu 22.04上配置和安装MySQL的步骤。这个过程可能看起来有点复杂,但只要按照步骤一步步来,你会发现其实并不难。记住,任何时候都不要急于求成,耐心是解决问题的关键。
1501 31
|
关系型数据库 MySQL Java
安装和配置JDK、Tomcat、MySQL环境,以及如何在Linux下更改后端端口。
遵循这些步骤,你可以顺利完成JDK、Tomcat、MySQL环境的安装和配置,并在Linux下更改后端端口。祝你顺利!
675 11
|
关系型数据库 MySQL Linux
CentOS 7系统下详细安装MySQL 5.7的步骤:包括密码配置、字符集配置、远程连接配置
以上就是在CentOS 7系统下安装MySQL 5.7的详细步骤。希望这个指南能帮助你顺利完成安装。
3226 26

推荐镜像

更多