如何在 mysql 中使用客户端证书

如何在 mysql 中使用客户端证书

这涉及我尝试在与 mysql 服务器的 SSL 加密连接上使用客户端证书。

一些基础知识:服务器是 ubuntu 12.04,运行 mysql 14.14 Distrib 5.1.69。客户端是 MacOS 10.8.5,运行 mysql Ver 14.14 Distrib 5.5.25a

有很多方法会导致此设置错误,正如这里和网络上其他地方的许多帖子所证实的那样。在这种情况下,服务器端配置似乎正确,因为可以使用如下命令

mysql --ssl-ca=CAcert.pem -u user -ppassword -h host.com -e '\s

获得正在使用密码的报告。

但是如果我添加客户端证书和密钥,例如

mysql --ssl-ca=CAcert.pem --ssl-cert=clientCert.pem --ssl-key=keyFile -u user -ppassword -h host.com -e '\s'

这会产生非常无意义的错误消息“ERROR 2026 (HY000): SSL 连接错误: error:00000001:lib(0):func(0):reason(1)”。服务器错误日志中没有任何内容。

我已经检查过,可以使用 openssl verify -purpose sslclient -CAfile CAcert.pem clientCert.pem 验证正在使用的 CA 的客户端证书

返回 ok。

CAcert.pem 和 clientCert.pem 的规范名称是不同的。CAcert.pem、clientCert.pem 和 keyFile 都是用户可读的(即使使密钥世界可读也无济于事)。

不幸的是,考虑到 mysql 在客户端和服务器之间使用的协议,似乎无法使用 openssl 客户端在此进行任何调试。

对于问题所在,您有什么建议吗?或者在客户端获取更多调试信息的方法?

答案1

无论使用哪种方法生成证书和密钥文件,用于服务器和客户端证书/密钥的通用名称值必须与用于 CA 证书的通用名称值不同。否则,证书和密钥文件不适用于使用 OpenSSL 编译的服务器。此情况下的典型错误是:

错误 2026 (HY000):SSL 连接错误: 错误:00000001:lib(0):func(0):原因(1)

来源:https://dev.mysql.com/doc/refman/5.7/en/creating-ssl-files-using-openssl.html

相关内容