mysql ERROR 2026(HY000):SSL连接错误:错误:00000001:lib(0):func(0):reason(1)

时间:2015-07-14 17:07:08

标签: mysql ssl

背景

我正在尝试通过命令行登录到由我们的某个管理员设置的mysql数据库。我看到他们已经启用了ssl,因为当我尝试连接时,我收到此消息:

 mysql --user=root --password=test testdb
ERROR 2026 (HY000): SSL connection error: error:00000001:lib(0):func(0):reason(1)

到目前为止我所检查的内容:

我已经检查了my.cnf文件中的ssl设置:

[client]
#password       = your_password
port            = 3306
socket          = /var/run/mysqld/mysqld.sock
ssl-ca   = /etc/ssl/ca-self-cert.pem
ssl-cert = /etc/ssl/server-self-cert.pem
ssl-key  = /etc/ssl/server-self-key.pem

[mysqld]
...
server-id       = 100                                                      
relay-log = mysqld-relay-bin                                               
ssl-ca   = /etc/ssl/ca-self-cert.pem                                       
ssl-cert = /etc/ssl/server-self-cert.pem                              
ssl-key  = /etc/ssl/server-self-key.pem  

我尝试更改login命令以查看此内容:

mysql --user=root --password=test testdb --protocol=TCP --ssl-ca=/etc/ssl/ca-self-cert.pem
ERROR 2003 (HY000): Can't connect to MySQL server on 'localhost' (111)

还有:

mysql --user=root --password=test testdb --protocol=TCP --ssl-ca=/etc/ssl/ca-self-cert.pem --host=10.123.123.123
ERROR 2026 (HY000): SSL connection error: error:00000001:lib(0):func(0):reason(1)

我为主机指定的值与my.cnf

中设置为bind-address的值相匹配

我还在google上查找其他文章/帖子。但到目前为止,我还没有找到解决方案。

任何建议都将不胜感激。

PS。我知道数据库本身是好的,因为连接到它的Web应用程序工作正常。我只需要能够连接,所以我可以转储数据库。

3 个答案:

答案 0 :(得分:8)

我找到了这个选项

 mysql --user=root --password=test testdb --skip-ssl

它也适用于mysqldump命令。

答案 1 :(得分:6)

添加' - skip-ssl '无法解决问题,这只是一个快速的解决方法。 (并导致可能的安全问题

我只需将机器日期更改为当前日期就解决了这个问题。

机器重启后发生在我身上,时钟不同步。 (跳到2010年而不是2017年)

答案 2 :(得分:2)

如前所述,-skip-ssl(对于MySQL 8.0则为--ssl-mode = DISABLED)不能解决该问题,它只会绕过它。

当SSL握手遇到错误时,将发生错误,MySQL缺少有关该错误的详细信息,这是一个已打开的错误:https://bugs.mysql.com/bug.php?id=75311

您应该首先检查您的证书:

openssl verify -CAfile /etc/mysql/newcerts/ca-cert.pem /etc/mysql/newcerts/server-cert.pem /etc/mysql/newcerts/client-cert.pem

然后,您必须遵循MySQL的要求来生成正确的密钥和证书,尤其是关于必须不同的Common Name值: https://dev.mysql.com/doc/refman/8.0/en/creating-ssl-files-using-openssl.html

根据Activ'Cloud支持,这是一种生成那些证书的方法,也许不是最好的,但是它有效:

服务器端:

openssl genrsa 2048 > /tmp/cert/mysqld-ca-key.pem
openssl req -sha1 -new -x509 -nodes -days 3650 -key /tmp/cert/mysqld-ca-key.pem -subj "/C=FR/ST=/L=/O=mysqld/CN=mysqld-CA" > /tmp/cert/mysqld-ca-cert.pem
openssl req -sha1 -newkey rsa:2048 -days 3650 -nodes -keyout /tmp/cert/mysqld-server-key.pem -subj "/C=FR/ST=/L=/O=mysqld/CN=mysqld-server" > /tmp/cert/mysqld-server-req.pem
openssl rsa -in /tmp/cert/mysqld-server-key.pem -out /tmp/cert/mysqld-server-key.pem
openssl x509 -sha1 -req -in /tmp/cert/mysqld-server-req.pem -days 3650 -CA /tmp/cert/mysqld-ca-cert.pem -CAkey /tmp/cert/mysqld-ca-key.pem -set_serial 01 > /tmp/cert/mysqld-server-cert.pem

客户端:

openssl req -sha1 -newkey rsa:2048 -days 3650 -nodes -keyout /tmp/client-cert/mysql-client-key.pem > /tmp/client-cert/mysql-client-req.pem -subj "/C=FR/ST=/L=/O=mysql-client/CN=mysql-client"
openssl rsa -in /tmp/client-cert/mysql-client-key.pem -out /tmp/client-cert/mysql-client-key.pem
openssl x509 -sha1 -req -in /tmp/client-cert/mysql-client-req.pem -days 3650 -CA /tmp/cert/mysqld-ca-cert.pem -CAkey /tmp/cert/mysqld-ca-key.pem -set_serial 01 > /tmp/client-cert/mysql-client-cert.pem                                                                                                                                                                                                    

然后将为客户端和服务器端生成的文件复制到正确的目录中。

最后,您可以尝试强制使用密码列表: https://dev.mysql.com/doc/refman/8.0/en/server-status-variables.html#statvar_Ssl_cipher_list