设为首页 加入收藏

TOP

如何在Ubuntu 18.04上为MySQL配置SSL/TLS(一)
2019-05-25 00:08:05 】 浏览:195
Tags:何在 Ubuntu 18.04 上为 MySQL 配置 SSL/TLS

介绍


MySQL是世界上最流行的开源关系数据库管理系统。 虽然现代包管理器已经减少了启动和运行MySQL的一些摩擦,但是在安装它之后还应该执行一些进一步的配置。 花费一些额外时间的最重要方面之一是安全性。


要遵循本教程,您将需要两台 Ubuntu 16.04服务器。我们将使用一个作为MySQL服务器,另一个作为客户端。没有服务器的同学可以在这里购买,不过我个人更推荐您使用免费的腾讯云开发者实验室进行试验,学会安装后在购买服务器。


在第一台机器上,您应该安装并配置MySQL服务器。按照我们的四步教你搭建保护MySQL服务器!教程来安装和配置软件。


在第二台计算机上,安装MySQL客户端软件包。您可以通过输入以下内容来更新apt软件包索引并安装必要的软件:


当您的服务器和客户端准备就绪后,请继续。


在开始之前,我们可以在MySQL服务器实例上检查SSL / TLS的当前状态。


使用root 用户登录MySQL会话。我们将使用-h指定IPv4本地环回接口,以强制客户端与TCP连接。这将允许我们检查TCP连接的SSL状态:


系统将提示您输入在安装过程中输入MySQL root密码。之后,您将进入交互式MySQL会话。


输入以下内容显示SSL / TLS变量的状态:


have_opensslhave_ssl变量都标记为DISABLED。这意味着SSL功能已编译到服务器中,但尚未启用。


检查我们当前连接的状态以确认:


如上面的输出所示,SSL尚未加密我们的链接


完成后关闭当前的MySQL会话:


现在我们可以开始为SSL配置MySQL以保护我们的连接。


要启用与MySQL的SSL连接,我们首先需要生成相应的证书和密钥文件。MySQL 5.7及更高版本提供了一个被调用的程序mysql_ssl_rsa_setup来简化此过程。Ubuntu 16.04具有兼容的MySQL版本,因此我们可以使用此命令生成必要的文件。


这些文件将在MySQL的数据目录中创建,位于/var/lib/mysql。我们需要MySQL进程能够读取生成的文件所以我们将mysql作为应该拥有生成文件的用户传递:


将产生如下所示的输出:


输入以下命令检查生成的文件:


最后一列显示生成的文件名。并表示生成的文件具有正确的用户和组所有权。


这些文件是证书颁发机构(以“ca”开头),MySQL服务器进程(以“server”开头)和MySQL客户端(以“client”开头)的密钥和证书对。


MySQL版本将在服务器启动时在MySQL数据目录中查找相应的证书文件。因此,我们实际上不需要修改MySQL配置来启用SSL。


我们可以改为重启MySQL服务:


重新启动后,使用与以前相同的命令打开新的MySQL会话。如果服务器支持,MySQL客户端将自动尝试使用SSL进行连接:


我们来看看上次请求的相同信息。检查SSL相关变量的值:


这次have_opensslhave_ssl变量读取“YES”而不是“DISABLED”。此外,ssl_cassl_cert,和ssl_key变量已填入我们产生的相关证书的名称。


接下来,再次检查连接详细信息:


这次,将显示特定的SSL加密方式,表示正在使用SSL来保护我们的连接。


退出到shell:


我们的服务器现在能够使用加密,但需要一些额外的配置才能允许远程访问并强制使用安全连接。


现在我们已在服务器上使用SSL,我们可以开始配置安全远程访问。为此,我们需要:


目前,MySQL服务器配置为接受来自客户端的SSL连接。但是,如果客户端请求,它仍将允许未加密的连接。


我们可以通过打开require_secure_transport选项来解决这个问题。这要求所有连接都使用SSL。因此对远程用户开放的唯一连接选项将使用SSL。


要启用此设置,请在文本编辑器中打/etc/mysql/my.cnf开文件:


在里面,将有两个!includedir指令用于获取其他配置文件。我们需要这些行下面放置我们自己的配置以便它们覆盖任何冲突的设置。


首先创建一个[mysqld]部分来定位MySQL服务器进程。将require_secure_transport设置为ON


该行是强制实施安全连接所需的唯一设置。


默认情况下,MySQL配置为仅侦听源自本地计算机的连接。要将其配置为侦听远程连接,我们可以将其bind-address设置为不同的接口。


要允许MySQL接受任何接口上的连接,我们可以将bind-address设置为“0.0.0.0”:


完成后保存并关闭文件。


接下来,重新启动MySQL以应用新设置:


通过输入以下内容验证MySQL是否正在侦听“0.0.0.0”而不是“127.0.0.1”:


上面输出中的“0.0.0.0”表示MySQL正在侦听所有可用接口上的连接。


接下来,我们需要通过防火墙允许MySQL连接。输入以下内容创建:


远程连接尝试现在应该??够到达我们的MySQL服务器。


MySQL服务器现在正在侦听远程连接,但我们目前没有配置任何可以从外部计算机连接的用户。以root用户身份登录MySQL 开始:


在内部,您可以使用CREATE USER命令创建新的远程用户。我们将在用户规范的主机部分中使用客户端计算机的IP地址来限制与该计算机的连接。对于将来关闭require_secure_transport选项的某些冗余,我们还将在帐户创建期间指定此用户通过包含REQUIRE SSL子句来要求SSL:


接下来,为他们应该有权访问的数据库或表授予新用户权限。为了演示,我们将创建一个example数据库并赋予新的用户所有权:


接下来,刷新权限立即应用这些设置:


完成后退出到shell:


我们的服务器设置为允许连接到我们的远程用户。


MySQL客户端计算机上,进行测试以确保您可以成功连接到服务器。使用-u选项指定远程用户以及-h选项指定MySQL服务器IP地址:


指定密码后,您将登录到远程服务器。


检查以确保您的连接安全:


退出到shell:


接下来,尝试不安全地连接:


提示您输入密码后,应拒绝您的连接:


它显示允许SSL连接,而拒绝未加密的连接。此时,我们的MySQL服务器已配置为安全地接受远程连接。如果这满足您的安全要求,您可以在这里停止,但我们可以实施一些额外的部分来进一步增强我们的安全性和信任。


目前,我们的MySQL服务器配置了由本地生成的证书颁发机构(CA)签名的SSL证书。服务器的证书和密钥对足以为传入连接提供加密。


但是,我们目前没有利用证书颁发机构可以提供的信任关系。通过将CA证书分发给客户端以及客户端证书和密钥,双方都可以提供其证书由相互信任的证书颁发机构签名的证明。这有助于防止恶意服务器的欺骗性连接。


为了实现这个额外的可选安全措施,我们需要:


首先,我们需要从MySQL服务器获取MySQL CA和客户端证书文件,并将它们放在MySQL客户端上。


首先在您将用于连接的用户的主目录中的MySQL客户端上创建一个目录。叫这个client-ssl:


我们应该锁定对此目录的访问权限,以便只有当前用户才能访问它:


现在,我们可以将证书信息复制到新目录。


MySQL服务器计算机上,输入以下内容显示CA证书的内容:


将整个输出(包括BEGIN CERTIFICATEEND CERTIFICATE行)复制到剪贴板。


MySQL客户端上,在新目录中创建一个具有相同名称的文件:


在里面,粘贴剪贴板

首页 上一页 1 2 下一页 尾页 1/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇Oracle RAC for aix 存储双控锁盘.. 下一篇explain执行计划分析-梁十八的博..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目