1.5. 将 MariaDB 客户端配置为默认使用 TLS 加密
在 RHEL 上,您可以全局配置 MariaDB 客户端使用 TLS 加密,并验证服务器证书中的通用名称(CN)是否与用户连接的主机名匹配。这可防止中间人攻击。
先决条件
- MariaDB 服务器启用了 TLS 支持。
- 如果 RHEL 不信任发布服务器证书的证书颁发机构(CA),则 CA 证书已被复制到客户端。
- 如果启用了 FIPS 模式,此客户端会支持 Extended Master Secret (EMS)扩展或使用 TLS 1.3。没有 EMS 的 TLS 1.2 连接会失败。如需更多信息,请参阅红帽知识库解决方案 在 RHEL 9.2 及更高版本上强制执行 TLS 扩展 "Extended Master Secret"。
流程
如果 RHEL 不信任发布服务器证书的 CA:
将 CA 证书复制到
/etc/pki/ca-trust/source/anchors/
目录中:cp <path>/ca.crt.pem /etc/pki/ca-trust/source/anchors/
# cp <path>/ca.crt.pem /etc/pki/ca-trust/source/anchors/
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 设置允许所有用户读取 CA 证书文件的权限:
chmod 644 /etc/pki/ca-trust/source/anchors/ca.crt.pem
# chmod 644 /etc/pki/ca-trust/source/anchors/ca.crt.pem
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 重建 CA 信任数据库:
update-ca-trust
# update-ca-trust
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
使用以下内容创建
/etc/my.cnf.d/mariadb-client-tls.cnf
文件:[client-mariadb] ssl ssl-verify-server-cert
[client-mariadb] ssl ssl-verify-server-cert
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 这些设置定义 MariaDB 客户端使用 TLS 加密(
ssl
),并且客户端将主机名与服务器证书 (ssl-verify-server-cert
)中的 CN 进行比较。
验证
使用主机名连接到服务器,并显示服务器状态:
mysql -u root -p -h server.example.com -e status
# mysql -u root -p -h server.example.com -e status ... SSL: Cipher in use is TLS_AES_256_GCM_SHA384
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果
SSL
条目包含Cipher in use is…
,则连接加密了。请注意,您在这个命令中使用的用户具有远程身份验证的权限。
如果您连接的主机名与服务器的 TLS 证书中的主机名不匹配,则
ssl-verify-server-cert
参数会导致连接失败。例如,如果您连接到localhost
:mysql -u root -p -h localhost -e status
# mysql -u root -p -h localhost -e status ERROR 2026 (HY000): SSL connection error: Validation of SSL server certificate failed
Copy to Clipboard Copied! Toggle word wrap Toggle overflow