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

dot*_*dot 6 mysql ssl

背景:

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

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

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

我已经检查了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  
Run Code Online (Sandbox Code Playgroud)

我尝试更改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)
Run Code Online (Sandbox Code Playgroud)

并且:

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)
Run Code Online (Sandbox Code Playgroud)

我为主机指定的值与my.cnf中设置为bind-address的值相匹配

我仍然谷歌更多地寻找其他文章/帖子.但到目前为止,我还没有找到解决方案.

任何建议,将不胜感激.

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

dot*_*dot 8

我找到了这个选项

 mysql --user=root --password=test testdb --skip-ssl
Run Code Online (Sandbox Code Playgroud)

它也适用于mysqldump命令.

  • 这并没有解决问题,它只是绕过它.如果您打算使用SSL,请使用它.如果没有,则不要在服务器中进行设置. (8认同)
  • 这个答案类似于医生建议因为脚趾疼痛而砍掉腿。 (4认同)

Sta*_*ler 5

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

我只需将机器日期更改为当前日期即可解决问题.

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


Jul*_*ien 5

如前所述,--skip-ssl(或--ssl-mode=DISABLED for MySQL 8.0)不能解决这个问题,它只是绕过它。

错误发生在 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
Run Code Online (Sandbox Code Playgroud)

然后,您必须遵循 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
Run Code Online (Sandbox Code Playgroud)

客户端 :

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                                                                                                                                                                                                    
Run Code Online (Sandbox Code Playgroud)

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

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