背景
我正在尝试通过命令行登录到由我们的某个管理员设置的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应用程序工作正常。我只需要能够连接,所以我可以转储数据库。
答案 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