在Ubuntu 16.04上通过SSL支持保护MariaDB

MariaDB是一个免费的开源数据库,并且是MySQL中使用最广泛的直接替代方法。它由MySQL的开发人员制作,并打算在GNU GPL下保持免费。它非常快速,可扩展,并且具有丰富的功能集,使其对于各种用例都非常通用。

本教程将引导您逐步了解如何在Ubuntu 16.04上安装和配置具有SSL支持的MariaDB。

要求

  • 新鲜的Ubuntu 16.04 Vultr实例。
  • 具有sudo特权的非root用户。
  • 在服务器实例上配置了静态IP地址192.168.0.190。
  • 在客户端计算机上配置了静态IP地址192.168.0.191。

步骤1:安装MariaDB

默认情况下,Ubuntu 16.04存储库中不提供最新版本的MariaDB。因此您需要将MariaDB存储库添加到系统中。

首先,使用以下命令下载密钥:

sudo apt-key adv --recv-keys --keyserver hkp://keyserver.ubuntu.com:80 0xF1656F24C74CD1D8

接下来,将MariaDB存储库添加到/etc/apt/sources.list文件中:

sudo echo "deb [arch=amd64,i386,ppc64el] http://ftp.utexas.edu/mariadb/repo/10.1/ubuntu xenial main" >> /etc/apt/sources.list

使用以下命令更新apt索引:

sudo apt-get update -y

apt索引更新后,使用以下命令安装MariaDB服务器:

sudo apt-get install mariadb-server -y

启动MariaDB服务器,并使其在启动时启动:

sudo systemctl start mysql
sudo systemctl enable mysql

接下来,您将需要运行mysql_secure_installation脚本来保护MariaDB的安装。此脚本允许您设置root密码,删除匿名用户,禁止远程root登录以及删除测试数据库:

sudo mysql_secure_installation

步骤2:为服务器创建SSL证书和私钥

首先,创建一个目录来存储所有密钥和证书文件。

sudo mkdir /etc/mysql-ssl

接下来,/etc/mysql-ssl使用以下命令将目录更改为并创建CA证书和私钥:

sudo cd /etc/mysql-ssl
sudo openssl genrsa 2048 > ca-key.pem
sudo openssl req -new -x509 -nodes -days 365000 -key ca-key.pem -out ca-cert.pem

回答所有问题,如下所示:

You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:IN
State or Province Name (full name) [Some-State]:GUJ
Locality Name (eg, city) []:JND
Organization Name (eg, company) [Internet Widgits Pty Ltd]:ENJ
Organizational Unit Name (eg, section) []:SYSTEM
Common Name (e.g. server FQDN or YOUR name) []:HITESH
Email Address []:example@example.com

接下来,使用以下命令为服务器创建私钥:

sudo openssl req -newkey rsa:2048 -days 365 -nodes -keyout server-key.pem -out server-req.pem

像上一个命令一样回答所有问题。

接下来,使用以下命令将服务器的私钥导出为RSA类型的密钥:

sudo sudo openssl rsa -in server-key.pem -out server-key.pem

最后,使用CA证书生成服务器证书,如下所示:

sudo openssl x509 -req -in server-req.pem -days 365 -CA ca-cert.pem -CAkey ca-key.pem -set_serial 01 -out server-cert.pem

现在,您可以使用以下命令查看所有证书和密钥:

ls

您应该看到以下输出:

ca-cert.pem  ca-key.pem  server-cert.pem  server-key.pem  server-req.pem

完成后,您可以继续下一步。

步骤3:将MariaDB服务器配置为使用SSL

您应该拥有所有证书和一个私钥;现在您将需要配置MariaDB以使用密钥和证书。您可以通过编辑/etc/mysql/mariadb.conf.d/50-server.cnf文件来做到这一点:

sudo nano /etc/mysql/mariadb.conf.d/50-server.cnf

在该[mysqld]部分下添加以下行:

ssl-ca=/etc/mysql-ssl/ca-cert.pem
ssl-cert=/etc/mysql-ssl/server-cert.pem
ssl-key=/etc/mysql-ssl/server-key.pem

##Change this value to connect the MariaDB server from another host.
bind-address = *

保存文件,然后重新启动MariaDB服务以应用以下更改:

sudo systemctl restart mysql

现在,您可以通过以下查询检查SSL配置是否正常工作:

mysql -u root -p
MariaDB [(none)]> SHOW VARIABLES LIKE '%ssl%';

如果配置成功,您应该看到以下输出:

+---------------+--------------------------------+
| Variable_name | Value                          |
+---------------+--------------------------------+
| have_openssl  | YES                            |
| have_ssl      | YES                            |
| ssl_ca        | /etc/mysql-ssl/ca-cert.pem     |
| ssl_capath    |                                |
| ssl_cert      | /etc/mysql-ssl/server-cert.pem |
| ssl_cipher    |                                |
| ssl_crl       |                                |
| ssl_crlpath   |                                |
| ssl_key       | /etc/mysql-ssl/server-key.pem  |
+---------------+--------------------------------+

您应该注意到上述输出中的have_sslhave_openssl值已启用。

步骤4:使用SSL权限创建用户

创建一个有权通过SSL访问MariaDB服务器的远程用户。通过运行以下命令来执行此操作:

首先,登录到MySQL shell:

mysql -u root -p

接下来,创建用户remote并授予特权以通过SSL访问服务器。

MariaDB [(none)]>GRANT ALL PRIVILEGES ON *.* TO 'remote'@'192.168.0.191' IDENTIFIED BY 'password' REQUIRE SSL;

然后,使用以下命令刷新特权:

MariaDB [(none)]>FLUSH PRIVILEGES;

最后,使用以下命令从MySQL Shell退出:

MariaDB [(none)]>exit;

注意: 192.168.0.191是远程用户(客户端)计算机的IP地址。

现在,您的服务器已准备好允许连接到远程用户。

步骤5:创建客户端证书

您的服务器端配置已完成。接下来,您将需要为客户端创建一个新的密钥和证书。

在服务器计算机上,使用以下命令创建客户端密钥:

sudo cd /etc/mysql-ssl
sudo sudo openssl req -newkey rsa:2048 -days 365 -nodes -keyout client-key.pem -out client-req.pem

接下来,使用以下命令处理客户端RSA密钥:

sudo openssl rsa -in client-key.pem -out client-key.pem

最后,使用以下命令签署客户端证书:

sudo openssl x509 -req -in client-req.pem -days 365 -CA ca-cert.pem -CAkey ca-key.pem -set_serial 01 -out client-cert.pem

步骤6:将MariaDB客户端配置为使用SSL

所有证书和密钥都已准备好供客户端使用。接下来,您将需要将所有客户端证书复制到要运行MariaDB客户端的任何客户端计算机上。

您将需要在客户端计算机上安装MariaDB客户端。

首先,在客户端计算机上,使用以下命令下载MariaDB的密钥:

sudo apt-key adv --recv-keys --keyserver hkp://keyserver.ubuntu.com:80 0xF1656F24C74CD1D8

然后,将MariaDB存储库添加到/etc/apt/sources.list文件中:

sudo echo "deb [arch=amd64,i386,ppc64el] http://ftp.utexas.edu/mariadb/repo/10.1/ubuntu xenial main" >> /etc/apt/sources.list

接下来,使用以下命令更新apt索引:

sudo apt-get update -y

apt索引更新后,使用以下命令在客户端计算机上安装MariaDB客户端:

sudo apt-get install mariadb-client -y

现在创建一个目录来存储所有证书:

sudo mkdir /etc/mysql-ssl

接下来,使用以下命令将所有客户端证书从服务器计算机复制到客户端计算机:

sudo scp root@192.168.0.190:/etc/mysql-ssl/client-* /etc/mysql-ssl/

然后,您将需要配置MariaDB客户端以使用SSL。您可以通过创建一个/etc/mysql/mariadb.conf.d/50-mysql-clients.cnf文件来做到这一点 :

sudo nano /etc/mysql/mariadb.conf.d/50-mysql-clients.cnf

添加以下行:

[client]
ssl-ca=/etc/mysql-ssl/ca-cert.pem
ssl-cert=/etc/mysql-ssl/client-cert.pem
ssl-key=/etc/mysql-ssl/client-key.pem

完成后保存文件。

步骤7:验证远程连接

现在,所有内容都已配置完毕,是时候验证是否可以成功连接到MariaDB服务器了。

在客户端计算机上,运行以下命令以连接到MariaDB服务器:

mysql -u remote -h 192.168.0.190 -p mysql

系统将要求您输入remote用户密码。输入密码后,您将登录到远程MariaDB服务器。

使用以下命令检查连接状态:

MariaDB [mysql]> status

您应该看到以下输出:

--------------
mysql  Ver 15.1 Distrib 10.2.7-MariaDB, for debian-linux-gnu (x86_64) using readline 5.2

Connection id:      62
Current database:   mysql
Current user:       remote@192.168.0.191
SSL:            Cipher in use is DHE-RSA-AES256-SHA
Current pager:      stdout
Using outfile:      ''
Using delimiter:    ;
Server:         MariaDB
Server version:     10.0.31-MariaDB-0ubuntu0.16.04.2 Ubuntu 16.04
Protocol version:   10
Connection:     192.168.0.190 via TCP/IP
Server characterset:    utf8mb4
Db     characterset:    utf8mb4
Client characterset:    utf8
Conn.  characterset:    utf8
TCP port:       3306
Uptime:         1 hours 31 min 31 sec

您应该SSL: Cipher in use is DHE-RSA-AES256-SHA在上面的输出中看到。这意味着您的连接现在通过SSL安全。

结论

恭喜你!您已成功配置具有SSL支持的MariaDB服务器。您现在可以将访问权限授予其他客户端,以通过SSL访问MariaDB服务器。

留下評論

在Arch Linux上使用Makepkg

在Arch Linux上使用Makepkg

在Arch Linux上使用Makepkg可以避免系统污染,确保仅安装必要的依赖关系。

如何在Ubuntu 16.04上安装OpenSIPS控制面板

如何在Ubuntu 16.04上安装OpenSIPS控制面板

快速学习如何在Ubuntu 16.04上安装OpenSIPS控制面板,为VoIP提供商提供支持的功能。

在Fedora 28上安装Akaunting

在Fedora 28上安装Akaunting

学习如何在Fedora 28上安装Akaunting,一款适合小型企业和自由职业者的开源会计软件。

如何在CentOS 7上安装Mailtrain新闻通讯应用程序

如何在CentOS 7上安装Mailtrain新闻通讯应用程序

使用其他系统?Mailtrain是一个基于Node.js和MySQL / MariaDB构建的开源自托管新闻通讯应用程序。

诊断Minecraft服务器延迟和低TPS

诊断Minecraft服务器延迟和低TPS

了解導致Minecraft延遲的原因和解決方案,包括優化伺服器性能和減少滯後的步驟。

AI 能否應對越來越多的勒索軟件攻擊?

AI 能否應對越來越多的勒索軟件攻擊?

勒索軟件攻擊呈上升趨勢,但人工智能能否幫助應對最新的計算機病毒?AI 是答案嗎?在這裡閱讀知道是 AI 布恩還是禍根

ReactOS:這是 Windows 的未來嗎?

ReactOS:這是 Windows 的未來嗎?

ReactOS,一個開源和免費的操作系統,這裡有最新版本。它能否滿足現代 Windows 用戶的需求並打倒微軟?讓我們更多地了解這種老式但更新的操作系統體驗。

通過 WhatsApp 桌面應用程序 24*7 保持聯繫

通過 WhatsApp 桌面應用程序 24*7 保持聯繫

Whatsapp 終於為 Mac 和 Windows 用戶推出了桌面應用程序。現在您可以輕鬆地從 Windows 或 Mac 訪問 Whatsapp。適用於 Windows 8+ 和 Mac OS 10.9+

人工智能如何將流程自動化提升到新的水平?

人工智能如何將流程自動化提升到新的水平?

閱讀本文以了解人工智能如何在小型公司中變得流行,以及它如何增加使它們成長並為競爭對手提供優勢的可能性。

macOS Catalina 10.15.4 補充更新引發的問題多於解決

macOS Catalina 10.15.4 補充更新引發的問題多於解決

最近,Apple 發布了 macOS Catalina 10.15.4 補充更新以修復問題,但似乎該更新引起了更多問題,導致 mac 機器變磚。閱讀這篇文章以了解更多信息