MariaDB 5.5 TLS握手失败问题求助,求下一步排查方向
下一步排查方向
1. 纠正SSL连接测试方法,用MySQL客户端验证
openssl s_client直接连接3306端口的方法不适用于MySQL,因为MySQL的SSL握手是在MySQL协议初始握手之后触发的,并非直接在TCP层启动TLS。正确的测试方式是用MySQL客户端强制SSL连接:
# 在Web主机执行,替换your_db_user为实际数据库用户 mysql -h db-host -u your_db_user -p --ssl-mode=REQUIRED --ssl-ca=/etc/pki/bundle-of-certs.crt
登录成功后执行STATUS;,查看输出中的SSL字段,若显示具体的加密套件(如DHE-RSA-AES256-SHA),说明SSL配置生效;若连接失败,会返回更精准的错误(如证书不匹配、权限问题等)。
2. 验证MariaDB SSL配置是否真正加载
登录数据库服务器的MariaDB,执行以下SQL查询:
SHOW VARIABLES LIKE '%ssl%';
重点检查:
have_ssl:必须为YES,否则说明MariaDB未编译SSL支持或未加载SSL配置(CentOS 8官方包通常默认支持,若为NO需检查是否存在skip_ssl配置)。ssl_ca、ssl_cert、ssl_key:需与你配置的文件路径完全一致,若为空或路径错误,说明配置未生效。
若配置存在但未加载,重启MariaDB服务后再次验证。
3. 检查证书文件的权限与归属
MariaDB运行用户(通常为mysql)必须拥有证书文件的读取权限:
ls -l /etc/pki/bundle-of-certs.crt /etc/pki/db-host.CAD.crt /etc/pki/db-host.key
确保文件归属为mysql:mysql,权限设置为:
- 证书文件(
bundle-of-certs.crt、db-host.CAD.crt):640 - 私钥文件(
db-host.key):600(严格限制避免其他用户读取)
若权限不符合,执行以下命令调整后重启MariaDB:
chown mysql:mysql /etc/pki/bundle-of-certs.crt /etc/pki/db-host.CAD.crt /etc/pki/db-host.key chmod 640 /etc/pki/bundle-of-certs.crt /etc/pki/db-host.CAD.crt chmod 600 /etc/pki/db-host.key
4. 确认TLS版本兼容性
MariaDB 5.5.38+支持TLS 1.2(你的版本5.5.68满足要求),但需检查两端的TLS版本限制:
- 数据库服务器端:查看
/etc/pki/tls/openssl.cnf的[system_default_sect]段,若MinProtocol设置为TLSv1.2,会禁止TLS 1.0/1.1连接,可调整为MinProtocol = TLSv1后重启服务。 - Java客户端:Java 1.8默认启用TLS 1.2,需确认JDBC URL是否包含正确的SSL参数,示例:
jdbc:mysql://db-host:3306/your_db?useSSL=true&requireSSL=true&verifyServerCertificate=true&sslCa=/etc/pki/bundle-of-certs.crt
5. 检查MariaDB的监听与用户权限
- 确认
my.cnf中[mysqld]段的bind-address未限制为仅本地监听(如127.0.0.1),需改为数据库服务器的内网/公网IP或0.0.0.0。 - 检查数据库用户是否被授予SSL连接权限:
若未包含SHOW GRANTS FOR 'your_db_user'@'web-host-ip';REQUIRE SSL,可添加强制SSL的权限:GRANT ALL PRIVILEGES ON your_db.* TO 'your_db_user'@'web-host-ip' REQUIRE SSL; FLUSH PRIVILEGES;
内容的提问来源于stack exchange,提问作者Codes with Hammer
相关产品推荐
相关产品推荐

