MySQL数据库支持SSL连接

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群版 2核4GB 100GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介:

转自:http://hi.baidu.com/freeners/blog/item/ab950513a5efe70c4a90a78c.html

这次为了研究MySQL yaSSL库证书解析栈溢出漏洞的扫描方法,搭建了一个环境,将此过程中的折腾记录一下。

[0x01]  MySQL对SSL的支持

MySQL支持SSL有两种方式,一种是使用OpenSSL,另一种是使用yassl.
使用openssl需要先安装openssl,而使用yassl就不必了,该源码已经包含在mysql的源码里了。yassl是一种潜入式的形式存在。

[0x02]  Linux下源码安装MySQL数据库以支持SSL

shell> groupadd mysql
shell> useradd -g mysql mysql
shell> gunzip < mysql-VERSION.tar.gz | tar -xvf -
shell> cd mysql-VERSION
shell> ./configure --prefix=/usr/local/mysql  --with-yassl
注意: yassl 与 openssl不能并存,二者只能选其一
shell> make
shell> make install
shell> cp support-files/my-medium.cnf /etc/my.cnf
shell> cd /usr/local/mysql
shell> chown -R mysql .
shell> chgrp -R mysql .
shell> bin/mysql_install_db --user=mysql
shell> chown -R root .
shell> chown -R mysql var
shell> bin/mysqld_safe --user=mysql &

执行到此,基本上已经完成一半了,现在mysql已经支持ssl了,但是还不能用,需要配置一下。

[0x03] 配置MySQL启用SSL

假定你已经有了相关的证书。证书的制作后面介绍。

1)修改配置文件my.cnf

认证机构证书  ssl-ca=/etc/mysql/ca.pem
服务器证书     ssl-cert=/etc/mysql/cert.pem
客户证书        ssl-key=/etc/mysql/key.pem

2)重启服务

这个时候应该已经大功告成了,可以用客户端来连接访问了。

[0x04] 检察数据库是否支持ssl

1) 检察二进制文件是否支持ssl

shell> mysqld --ssl --help
[error] mysqld: unknown option '--ssl'
如果二进制文件不支持ssl的话,将提示错误信息。

2) 检测运行中的mysqld是否支持SSL

mysql> show variables like '%ssl%'

have_ssl     yes
have_openssl yes

可以通过执行以上命令来检查have_ssl或have_openssl是否为yes。

have_ssl是在5.0.38版本中增加的,该版本之后,have_openssl是作为have_ssl的别名存在。兼容以前的版本。

[0x05] 用mysql使用ssl连接访问

shell> mysql --ssl-ca=ca.pem --ssl-cert=cert.pem --ssl-key=key.pem

此时,只能从本地访问,如果从另一台主机访问还需要开通相应权限。

[0x06] 修改初始密码

1) set password

mysql> set password for 'root'@'localhost' = password('xxxx');
mysql> set password for ''@'localhost' = password('xxx');

2) update

mysql> update mysql.user set password = password( 'xxx' ) where user ='root';
mysql> update mysql.user set password = password( 'xxx' ) where user='';
mysql> flush privileges;

3) mysqladmin

shell> mysqladmin -u root password "xxxx"
shell> mysqladmin -u root -h xxx.com password "xxxx"

[0x07] 新增用户

1) mysql> create user 'guodaxing'@'%' identified by 'xxxx';
mysql> grant all privileges on *.* to 'guodaxing'@'%' with grant option;

[0x08]  Windows MySQL支持SSL

我安装了mysql的windows版二进制程序,这个好像已经编译了yassl,只需要修改下配置就可以了。与linux上的配置类似,修改下my.ini文件。

第一次安装的是5.0.X版本的mysql,成功!
第二次安装的是5.1.X版本的mysql,配置好之后重启数据库,连上后查看ssl是否起来了,结果只看到了配置里证书的配置路径,have_ssl和have_openssl均为disable,
怀疑是不是编译的时候没有支持yassl,后来查看到使用手册里解释have_ssl为disable表示该功能也有,但是没有启用,后来排查发现是证书的路径写错了导致的,修改后一切正常。

[0x09]  漏洞验证

intevydis的blog里提供了一个PoC

http://intevydis.com/mysql_overflow1.py.txt
http://intevydis.blogspot.com/2010/01/mysq-yassl-stack-overflow.html

在linux上自动启动mysql会启动mysqld_safe,该程序会调用mysqld,执行poc的时候mysqld_safe并不会崩溃,但mysqld会崩溃,不影响另一个客户端的访问,mysqld_safe好像会再fork一个mysqld。
在windows上mysqld_nt以服务形式存在,当客户端访问时就会生产一个服务线程,执行PoC会导致mysql服务崩溃。

[0x0A]  参考资料

http://www.netexpertise.eu/en/freeradius/mysql-traffic-encryption-with-openssl.html




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

相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
11天前
|
JavaScript 关系型数据库 API
Nest.js 实战 (二):如何使用 Prisma 和连接 PostgreSQL 数据库
这篇文章介绍了什么是Prisma以及如何在Node.js和TypeScript后端应用中使用它。Prisma是一个开源的下一代ORM,包含PrismaClient、PrismaMigrate、PrismaStudio等部分。文章详细叙述了安装PrismaCLI和依赖包、初始化Prisma、连接数据库、定义Prisma模型、创建Prisma模块的过程,并对比了Prisma和Sequelize在Nest.js中的使用体验,认为Prisma更加便捷高效,没有繁琐的配置。
Nest.js 实战 (二):如何使用 Prisma 和连接 PostgreSQL 数据库
|
2天前
|
SQL 关系型数据库 MySQL
如何在PHP中连接到数据库?
在PHP中连接MySQL数据库常用的方法是MySQLi与PDO。MySQLi专为MySQL设计,支持面向对象及过程化编程,并提供预处理语句防止SQL注入。
|
9天前
|
缓存 分布式计算 DataWorks
DataWorks操作报错合集之连接数据库时出现了通信链接失败的报错,该如何解决
DataWorks是阿里云提供的一站式大数据开发与治理平台,支持数据集成、数据开发、数据服务、数据质量管理、数据安全管理等全流程数据处理。在使用DataWorks过程中,可能会遇到各种操作报错。以下是一些常见的报错情况及其可能的原因和解决方法。
|
9天前
|
SQL DataWorks Java
DataWorks操作报错合集之在与某个数据库服务器建立或保持通信连接时遇到报错,该如何解决
DataWorks是阿里云提供的一站式大数据开发与治理平台,支持数据集成、数据开发、数据服务、数据质量管理、数据安全管理等全流程数据处理。在使用DataWorks过程中,可能会遇到各种操作报错。以下是一些常见的报错情况及其可能的原因和解决方法。
|
17天前
|
ARouter 关系型数据库 MySQL
Django项目同时连接多个不同的数据库(7)
【7月更文挑战第7天】在Django项目中配置连接多个数据库,你需要: 1. 在`settings.py`中配置多个数据库, 2. 在`settings.py`内设置数据库路由,指定每个应用使用的数据库,
34 2
|
2天前
|
Oracle 关系型数据库 MySQL
入职必会-开发环境搭建17-IDEA连接数据库
IntelliJ IDEA集成了众多插件,方便开发者使用,使用IDEA自带的Database模块就可以很方便的配置、连接数据库,在 IntelliJ IDEA 中连接数据库,可以按照以下步骤进行操作。
|
5天前
|
SQL 数据库 数据安全/隐私保护
为什么程序连接不同的数据库要使用不同的账号
为什么程序连接不同的数据库要使用不同的账号
|
10天前
|
DataWorks 关系型数据库 MySQL
DataWorks操作报错合集之从OceanBase(OB)数据库调度数据到MySQL数据库时遇到连接报错,该怎么办
DataWorks是阿里云提供的一站式大数据开发与治理平台,支持数据集成、数据开发、数据服务、数据质量管理、数据安全管理等全流程数据处理。在使用DataWorks过程中,可能会遇到各种操作报错。以下是一些常见的报错情况及其可能的原因和解决方法。
|
16天前
|
SQL Java 关系型数据库
Java面试题:描述JDBC的工作原理,包括连接数据库、执行SQL语句等步骤。
Java面试题:描述JDBC的工作原理,包括连接数据库、执行SQL语句等步骤。
27 0
|
20天前
|
存储 关系型数据库 MySQL
探索MySQL:关系型数据库的基石
MySQL,作为全球最流行的开源关系型数据库管理系统(RDBMS)之一,广泛应用于各种Web应用、企业级应用和数据仓库中