AWS MySQL 错误 2026(HY000):SSL 连接错误:

AWS MySQL 错误 2026(HY000):SSL 连接错误:

我正在尝试使用 OSX El Captain 上的终端连接到我的 AWS RDS MySQL 实例,但我一直收到此错误:

ERROR 2026 (HY000): SSL connection error: error:00000001:lib(0):func(0):reason(1)

这是全新安装的 OSX,我使用 brew 安装 mysql 和 openssl,可以连接到本地服务器。另外,MySQL workbench 似乎运行良好。

我的 Ubuntu 机器也可以通过终端正常连接到 RDS 实例。

答案1

我遇到了同样的问题,并找到了解决办法!brew很可能安装了 mysql 5.7,据我所知,除非另有说明,否则需要 ssl --skip-ssl。您可以通过运行卸载 mysql brew uninstall mysql,然后通过运行安装 5.5 brew install https://raw.githubusercontent.com/Homebrew/homebrew-versions/master/mysql55.rb && brew link homebrew/versions/mysql55 --force

当然,这并不能解决修复初始错误的问题,但我没有找到任何文档来说明为什么 5.7 与 5.5 在开箱即用方面存在如此大的不同。祝你好运!

编辑: 啊哈!这是文档

--ssl

对于 MySQL 服务器,此选项指定服务器允许但不要求 SSL 连接。从 MySQL 5.7.5 开始,该选项在服务器端默认启用,在 5.7.5 之前禁用。此外,从 MySQL 5.7.5 开始,使用 OpenSSL 编译的 MySQL 服务器可以在启动时自动生成缺失的 SSL 文件。请参见第 6.3.13.1 节“使用 MySQL 创建 SSL 和 RSA 证书和密钥”

编辑2:

另一个选择是,您不需要降级到 5.5,而是可以打开(或创建)/etc/my.cnf/etc/mysql/my.cnf并使用现有的 mysql > 5.7.5 添加以下内容:

[client]
ssl=0

这将禁用客户端连接上的 SSL,并且其行为类似于mysql<5.7.5。

答案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 要求来生成正确的密钥和证书,尤其是关于必须不同的通用名称值: 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

相关内容