背景:
我正在尝试通过命令行登录到我们的管理员之一设置的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应用程序工作正常.我只需要能够连接,所以我可以转储数据库.
我找到了这个选项
mysql --user=root --password=test testdb --skip-ssl
Run Code Online (Sandbox Code Playgroud)
它也适用于mysqldump命令.
添加' --skip-ssl '并不能解决问题,这只是一个快速的解决方法.(并导致可能的安全问题)
我只需将机器日期更改为当前日期即可解决问题.
机器重启后发生在我身上,时钟不同步.(跳到2010而不是2017)
如前所述,--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
| 归档时间: |
|
| 查看次数: |
10640 次 |
| 最近记录: |