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

创build一个自签名的SSL证书后,我configuration了我的远程mysqld来使用它们(并且启用了ssl

我SSH到我的远程服务器,并尝试连接到自己的mysqld使用SSL(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的一些问题。 所以我下载客户端键到我的本地盒,并从那里testing…

 ~> 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) 

不过,我相信这只是encryption连接,而不是实际validation证书的有效性(意味着我可能容易受到中间人攻击)

ssl证书是有效的(尽pipe是自签名的),并且没有密码

所以我的问题是,我做错了什么? 如何使用自签名证书通过SSL进行连接?

MySQL服务器版本是5.5.25,服务器和客户端是Centos 5感谢您的任何build议

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

编辑(响应mgorven):ca.cert是证书颁发机构证书,应该告诉mysql我的证书颁发机构是可信的。

my.cnf的configuration是

 [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,但是因为它没有帮助,所以删除了它

是的,你是正确的,如果你不指定 – 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 

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

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

mysql客户端上的--ssl-cert--ssl-key用于2路SSL。 这意味着基于证书的authentication。 客户端证书的主题应该是用户名。

无论如何,你有没有为服务器和客户端证书input相同的通用名称? 如果是,请更换其中一个,以便通用名称不同。