创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相同的通用名称? 如果是,请更换其中一个,以便通用名称不同。