mysql --ssl-verify-server-cert=true 返回 "SSL certificate validation failure"

标签 mysql ssl https ssl-certificate

通过尝试在 RHEL6 上通过 SSL 设置 Mysql,每当我要求 mysql 客户端验证自签名证书时,我都会遇到错误:

mysql --ssl-ca=/tmp/newcerts/ca.pem \
 --ssl-cert=/tmp/newcerts/client-cert.pem \
 --ssl-key=/tmp/newcerts/client-key.pem \
 -h IP.IP.IP.IP -u USER -p \
 --ssl-verify-server-cert=true

ERROR 2026 (HY000): SSL connection error: SSL certificate validation failure

在我设置--ssl-verify-server-cert=false 的情况下,mysql 不验证自签名证书并启动安全连接。

我使用 Mysql HowTo 文章创建了我的自签名证书:https://dev.mysql.com/doc/refman/5.6/en/creating-ssl-files-using-openssl.html并且 openssl verify 命令正在返回:

openssl verify -CAfile ca.pem server-cert.pem client-cert.pem

server-cert.pem: OK
client-cert.pem: OK

ca.pem & client-cert.pem & server-cert.pem 已使用不同的通用名称创建,如 ca.pem 的 Node1、client-cert.pem 的 Node2、server-cert.pem 的 Node3

启动时加载到Mysql的参数:

ssl-ca=/tmp/newcerts/ca.pem
ssl-cert=/tmp/newcerts/server-cert.pem
ssl-key=/tmp/newcerts/server-key.pem

然后我按照 RHEL6 的这些步骤将 ca.pem 添加到服务器:

update-ca-trust force-enable
cp /tmp/newcerts/ca.pem /etc/pki/ca-trust/source/anchors/
update-ca-trust extract

我猜测使用由受信任的第三方验证的适当证书我不应该出现此错误,但我需要验证它是否适用于自签名证书。

我已经没有办法让它工作了。有人遇到过类似的问题吗?

最佳答案

就我而言(对于自签名证书),解决方案是:

  • 无需将ca.pem添加到受信任的根证书
  • 需要将server-cert.pem的CN设置为mysqlserverhostname
  • 确保从您的客户端解析 mysqlserverhostname
  • -h IP.IP.IP.IP -u USER -p 替换为 -h mysqlserverhostname -u USER -p

我的错误是遵循 Mysql doc引述“要生成测试文件,您可以在所有提示中按 Enter”的说明似乎不正确,我不得不将 server-cert.pem 的 CN 设置为 mysqlserverhostname 以解决问题。

关于mysql --ssl-verify-server-cert=true 返回 "SSL certificate validation failure",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47023263/

相关文章:

mysql - 动态 MySql 查询每天返回 X 次结果

mysql - MySQL 中何时使用单引号、双引号和反引号

mysql - SQL LIKE 通配符空格字符

android - 如果 Parse 推送已初始化,则 HTTPS 请求的 SSLPeerUnverifiedException

无法交叉编译(windows)链接ssl库的程序

python - 如何在没有 (L)GPL 库的情况下在 Python 中创建双重身份验证 HTTPS 客户端?

php - 如何在sphinx中使用子查询?

java - NIO 客户端/服务器安全地验证凭据

iis - 需要有关设置 SSL 的帮助

Node.js HTTPS 代理服务器不工作