升级到 Ubuntu 20.04 后无法连接 MySQL(错误 2026)

升级到 Ubuntu 20.04 后无法连接 MySQL(错误 2026)

将工作站升级到 Ubuntu 20.04 LTS 后,我无法连接到在 CentOS 7 服务器上运行的 MySQL 5.7.27。我使用命令进行连接mysql -h <server_ip> -u <user_name> -p,输入密码后出现错误 2026:

ERROR 2026 (HY000): SSL connection error: error:1425F102:SSL
routines:ssl_choose_client_version:unsupported protocol

我也尝试使用 mysqldump 获取数据库数据,但最终出现了类似的错误。我想也许工作站升级后,mysql 客户端不再支持旧协议,因此我使用 ssh 登录服务器,从服务器的 shell 访问 mysql,并查看支持哪些协议

mysql> SHOW GLOBAL VARIABLES LIKE 'tls_version';
+---------------+---------------+
| Variable_name | Value         |
+---------------+---------------+
| tls_version   | TLSv1,TLSv1.1 |
+---------------+---------------+
1 row in set (0,00 sec)

有了这些信息,我再次尝试从工作站进行连接,这次指定了 TLS 版本

mysql -h <server_ip> --tls-version=TLSv1.1 -u <user_name> -p
mysql -h <server_ip> --tls-version=TLSv1 -u <user_name> -p

这两个命令最终都

ERROR 2026 (HY000): SSL connection error: error:141E70BF:SSL routines:tls_construct_client_hello:no protocols available

我发现的唯一解决方法是使用以下方法禁用 SSLmysql -h <server_ip> --ssl-mode=DISABLED -u <user_name> -p

我是否遗漏了什么,或者存在错误?感谢您的回答。

答案1

我找到了一个解决方案,假设您的 MySQL 使用的是 OpenSSL 而不是 yaSSL。

请参阅ssl_密码MySQL 的配置变量。

配置包含伪密码的密码列表@SECLEVEL=1

例如,

ssl_cipher = "DHE-RSA-AES128-GCM-SHA256:AES128-SHA:@SECLEVEL=1"

如果你需要一个更宽松但仍然安全的密码列表,

"EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH:ECDHE-RSA-AES128-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA128:DHE-RSA-AES128-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES128-GCM-SHA128:ECDHE-RSA-AES128-SHA384:ECDHE-RSA-AES128-SHA128:ECDHE-RSA-AES128-SHA:ECDHE-RSA-AES128-SHA:DHE-RSA-AES128-SHA128:DHE-RSA-AES128-SHA128:DHE-RSA-AES128-SHA:DHE-RSA-AES128-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA384:AES128-GCM-SHA128:AES128-SHA128:AES128-SHA128:AES128-SHA:AES128-SHA:DES-CBC3-SHA:HIGH:!aNULL:!eNULL:!EXPORT:!DES:!MD5:!PSK:!RC4:@SECLEVEL=1"

取自密码列表可能会起到作用。

答案2

作为临时解决方案,您可以从命令行禁用 SSL

$ mysql -h <myserver> -u <myuser> -p --ssl-mode=DISABLED
password:

或者通过创建 my.cnf 文件

$ cat /etc/my.cnf  
[client] 
ssl-mode=DISABLED

答案3

抱歉,我留下了应该作为评论作为答案的内容(代表性不足),但是:

  • 自 Ubuntu 20.04 以来,TLS 1.0 和 1.1 似乎已在系统范围内禁用。
  • 我不知道如何重新启用它(这就是我偶然发现这个问题的原因)

openssl s_client -tls1 -connect <some TLSv1-enabled host>:443除了不起作用之外,我没有其他证据证明这一点,并且都不能nginx作为服务器支持 TLS 1.0 和 1.1(即使配置正确):/。

1.2 之前的 TLS 版本通常被认为不安全,应避免使用,这可能就是这样做的原因。

恐怕这只提供了一半的答案;我希望有人能提出解决方案来重新启用 TLS 1.0 和/或 1.1。

答案4

使用您最喜欢的编辑器打开/usr/lib/ssl/openssl.cnf

vi /usr/lib/ssl/openssl.cnf

在文件顶部添加以下行:

openssl_conf = old_support_conf

在文件底部添加以下行:

[old_support_conf]
ssl_conf = ssl_sect

[ssl_sect]
system_default = system_default_sect

[system_default_sect]
MinProtocol = TLSv1.1
CipherString = DEFAULT@SECLEVEL=1

如果 TLSv1.1 对您不起作用,您可能需要将其更改为 TLSv1 并尝试。

相关内容