通过尝试在 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/