无法使用自签名 SSL 证书连接到 mysql

无法使用自签名 SSL 证书连接到 mysql

创建自签名 SSL 证书后,我已将远程 MySQL 服务器配置为使用它们(并且 SSL 已启用)

我通过 ssh 进入我的远程服务器,并尝试使用 SSL 连接到它自己的 mysqld(MySQL 服务器是 5.5.25)。

mysql -u <user> -p --ssl=1 --ssl-cert=client.cert --ssl-key=client.key --ssl-ca=ca.cert
Enter password: 
ERROR 2026 (HY000): SSL connection error: error:00000001:lib(0):func(0):reason(1)

好的,我记得我读过通过 SSL 连接到同一台服务器时遇到一些问题。所以我将客户端密钥下载到本地,然后从那里进行测试...

mysql -h <server> -u <user> -p --ssl=1 --ssl-cert=client.cert --ssl-key=client.key --ssl-ca=ca.cert 
Enter password: 
ERROR 2026 (HY000): SSL connection error

目前还不清楚这个“SSL 连接错误”错误指的是什么,但如果我省略-ssl-ca,那么我就能够使用 SSL 进行连接。

mysql -h <server> -u <user> -p --ssl=1 --ssl-cert=client.cert --ssl-key=client.key 
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 37
Server version: 5.5.25 MySQL Community Server (GPL)

但是,我相信这只是加密连接,而不是真正验证证书的有效性(这意味着我可能容易受到中间人攻击)

SSL 证书有效(尽管是自签名的),并且没有密码。所以我的问题是,我做错了什么?如何使用自签名证书通过 SSL 进行连接?

MySQL 服务器版本是 5.5.25,服务器和客户端是 CentOS 5。

谢谢你的建议

编辑:请注意,在所有情况下,命令都是从 SSL 密钥所在的同一目录发出的(因此没有绝对路径)

编辑(回复 mgorven): ca.cert是证书颁发机构证书,它应该告诉 mysql 我的证书颁发机构是受信任的。

配置my.cnf来自

[mysqld]
ssl-ca=/etc/ssl/mysql/ca.cert
ssl-cert=/etc/ssl/mysql/server.cert
ssl-key=/etc/ssl/mysql/server.key

我也尝试过添加ssl-cipher=DHE-RSA-AES256-SHA但由于没有帮助所以删除了它。

答案1

是的,你说得对,如果你不指定,--ssl-ca那么客户端根本不会检查服务器证书。由于它没有该选项也可以工作,因此失败的最可能原因是客户端不信任服务器证书。

如果您使用自签名的客户端和服务器证书,则文件ca.cert应包含这两个文件。这样,客户端将信任服务器证书,服务器也将信任客户端证书。

例如:
生成服务器密钥和证书:

$ openssl req -x509 -newkey rsa:1024 \
         -keyout server-key-enc.pem -out server-cert.pem \
         -subj '/DC=com/DC=example/CN=server' -passout pass:qwerty

$ openssl rsa -in server-key-enc.pem -out server-key.pem \
         -passin pass:qwerty -passout pass:

生成客户端密钥和证书:

$ openssl req -x509 -newkey rsa:1024 \
         -keyout client-key-enc.pem -out client-cert.pem \
         -subj '/DC=com/DC=example/CN=client' -passout pass:qwerty

$ openssl rsa -in client-key-enc.pem -out client-key.pem \
         -passin pass:qwerty -passout pass:

将客户端和服务器证书合并到 CA 证书文件中:

$ cat server-cert.pem client-cert.pem > ca.pem

答案2

要使用单向 SSL,您应该尝试:

mysql -u <user> -p --ssl=1 --ssl-ca=ca.cert --ssl-verify-server-cert

mysql 客户端上的--ssl-cert--ssl-key用于双向 SSL。这意味着基于证书的身份验证。客户端证书的主题应该是用户名。

答案3

您是否为服务器和客户端证书输入了相同的通用名称?如果是,请替换其中一个,以使通用名称不同。

相关内容