1.4. 在 MariaDB 服务器上设置 TLS 加密
默认情况下,MariaDB 使用未加密的连接。对于安全连接,在 MariaDB 服务器上启用 TLS 支持,并配置您的客户端,来建立加密连接。
1.4.1. 将 CA 证书、服务器证书和私钥放在 MariaDB 服务器上
在 MariaDB 服务器中启用 TLS 加密之前,请在 MariaDB 服务器上存储证书颁发机构(CA)证书、服务器证书和私钥。
先决条件
- 以下 Privacy Enhanced Mail(PEM)格式的文件已复制到服务器: - 
									服务器的私钥:server.example.com.key.pem
- 
									服务器证书:server.example.com.crt.pem
- 
									证书颁发机构(CA)证书:ca.crt.pem
 - 有关创建私钥和证书签名请求(CSR),以及从 CA 请求证书的详情,请查看您的 CA 文档。 
- 
									服务器的私钥:
流程
- 将 CA 和服务器证书存储在 - /etc/pki/tls/certs/目录中:- mv <path>/server.example.com.crt.pem /etc/pki/tls/certs/ mv <path>/ca.crt.pem /etc/pki/tls/certs/ - # mv <path>/server.example.com.crt.pem /etc/pki/tls/certs/ # mv <path>/ca.crt.pem /etc/pki/tls/certs/- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 对 CA 和服务器证书设置权限,使 MariaDB 服务器能够读取文件: - chmod 644 /etc/pki/tls/certs/server.example.com.crt.pem /etc/pki/tls/certs/ca.crt.pem - # chmod 644 /etc/pki/tls/certs/server.example.com.crt.pem /etc/pki/tls/certs/ca.crt.pem- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 由于证书是建立安全连接前通信的一部分,因此任何客户端都可以在不需要身份验证的情况下检索它们。因此,您不需要对 CA 和服务器证书文件设置严格的权限。 
- 将服务器的私钥存储在 - /etc/pki/tls/private/目录中:- mv <path>/server.example.com.key.pem /etc/pki/tls/private/ - # mv <path>/server.example.com.key.pem /etc/pki/tls/private/- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 对服务器的私钥设置安全权限: - chmod 640 /etc/pki/tls/private/server.example.com.key.pem chgrp mysql /etc/pki/tls/private/server.example.com.key.pem - # chmod 640 /etc/pki/tls/private/server.example.com.key.pem # chgrp mysql /etc/pki/tls/private/server.example.com.key.pem- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 如果未授权的用户可以访问私钥,则到 MariaDB 服务器的连接不再安全。 
- 恢复 SELinux 上下文: - restorecon -Rv /etc/pki/tls/ - # restorecon -Rv /etc/pki/tls/- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
1.4.2. 在 MariaDB 服务器上配置 TLS
要提高安全性,请在 MariaDB 服务器上启用 TLS 支持。因此,客户端可以使用 TLS 加密向服务器传输数据。
先决条件
- 您已安装了 MariaDB 服务器。
- 
							mariadb服务正在运行。
- 服务器上存在 Privacy Enhanced Mail(PEM)格式的以下文件,并可由 - mysql用户读取:- 
									服务器的私钥:/etc/pki/tls/private/server.example.com.key.pem
- 
									服务器证书:/etc/pki/tls/certs/server.example.com.crt.pem
- 
									证书颁发机构(CA)证书 /etc/pki/tls/certs/ca.crt.pem
 
- 
									服务器的私钥:
- 主题可识别名称(DN)或服务器证书中的主题备用名称(SAN)字段与服务器的主机名相匹配。
- 如果启用了 FIPS 模式,客户端必须支持 Extended Master Secret(EMS)扩展或使用 TLS 1.3。没有 EMS 的 TLS 1.2 连接会失败。如需更多信息,请参阅红帽知识库解决方案 在 RHEL 9.2 及更高版本上强制执行 TLS 扩展"Extended Master Secret"。
流程
- 创建 - /etc/my.cnf.d/mariadb-server-tls.cnf文件:- 添加以下内容来配置到私钥、服务器和 CA 证书的路径: - [mariadb] ssl_key = /etc/pki/tls/private/server.example.com.key.pem ssl_cert = /etc/pki/tls/certs/server.example.com.crt.pem ssl_ca = /etc/pki/tls/certs/ca.crt.pem - [mariadb] ssl_key = /etc/pki/tls/private/server.example.com.key.pem ssl_cert = /etc/pki/tls/certs/server.example.com.crt.pem ssl_ca = /etc/pki/tls/certs/ca.crt.pem- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 如果您有一个证书撤销列表(CRL),请将 MariaDB 服务器配置为使用它: - ssl_crl = /etc/pki/tls/certs/example.crl.pem - ssl_crl = /etc/pki/tls/certs/example.crl.pem- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 可选:拒绝没有加密的连接尝试。要启用此功能,请附加: - require_secure_transport = on - require_secure_transport = on- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 可选:设置服务器应支持的 TLS 版本。例如,要支持 TLS 1.2 和 TLS 1.3,请附加: - tls_version = TLSv1.2,TLSv1.3 - tls_version = TLSv1.2,TLSv1.3- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 默认情况下,服务器支持 TLS 1.1、TLS 1.2 和 TLS 1.3。 
 
- 重启 - mariadb服务:- systemctl restart mariadb - # systemctl restart mariadb- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
验证
要简化故障排除,请在将本地客户端配置为使用 TLS 加密之前在 MariaDB 服务器上执行以下步骤:
- 验证 MariaDB 现在是否启用了 TLS 加密: - Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 如果 - have_ssl变量设置为- yes,则启用 TLS 加密。
- 如果您将 MariaDB 服务配置为只支持特定的 TLS 版本,则显示 - tls_version变量:- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
1.4.3. MariaDB 服务器上特定的用户帐户需要 TLS 加密连接
可以访问敏感数据的用户应始终使用 TLS 加密连接,以避免通过网络发送未加密的数据。
					如果您无法在服务器上配置所有连接都需要安全传输(require_secure_transport = on),请将单个用户帐户配置为需要 TLS 加密。
				
先决条件
- MariaDB 服务器启用了 TLS 支持。
- 您配置为需要安全传输的用户已存在。
流程
- 以管理员用户身份连接到 MariaDB 服务器: - mysql -u root -p -h server.example.com - # mysql -u root -p -h server.example.com- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 如果您的管理用户没有远程访问服务器的权限,请在 MariaDB 服务器上执行命令,并连接到 - localhost。
- 使用 - REQUIRE SSL子句强制用户必须使用 TLS 加密连接进行连接:- MariaDB [(none)]> ALTER USER 'example'@'%' REQUIRE SSL; - MariaDB [(none)]> ALTER USER 'example'@'%' REQUIRE SSL;- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
验证
- 使用 TLS 加密,以 - example用户身份连接到服务器:- mysql -u example -p -h server.example.com --ssl - # mysql -u example -p -h server.example.com --ssl ... MariaDB [(none)]>- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 如果没有显示错误,且您可以访问交互式 MariaDB 控制台,则与 TLS 的连接成功。 
- 尝试以禁用 TLS 的 - example用户身份进行连接:- mysql -u example -p -h server.example.com --skip-ssl - # mysql -u example -p -h server.example.com --skip-ssl ERROR 1045 (28000): Access denied for user 'example'@'server.example.com' (using password: YES)- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 服务器拒绝登录尝试,因为此用户需要 TLS,但被禁用了( - --skip-ssl)。