【问题标题】:MySQL ERROR 2026 - SSL connection error - Ubuntu 20.04MySQL ERROR 2026 - SSL 连接错误 - Ubuntu 20.04
【发布时间】:2020-08-22 06:36:44
【问题描述】:

我最近将我的本地机器操作系统从 Ubuntu 18.04 升级到 20.04,我在 CentOS (AWS) 上运行我的 MySQL 服务器。每当我尝试连接到 MySQL 服务器时,升级后都会引发 SSL 连接错误。

$ mysql -u yamcha -h database.yourproject.com -p --port 3309

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

但如果我同时传递--ssl-mode=disabled 选项,我就可以远程连接。

$ mysql -u yamcha -h database.yourproject.com -p --port 3309 --ssl-mode=disabled

Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 22158946
Server version: 5.7.26 MySQL Community Server (GPL)

Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> 

查询:

  1. 如何连接不通过--ssl-mode=disabled
  2. 如何在我的 Django 应用程序中传递此 --ssl-mode=disabled 选项,目前我已将其定义如下所示,但我仍然遇到相同的错误。
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'yamcha',
        'USER': 'yamcha',
        'PASSWORD': 'xxxxxxxxxxxxxxx',
        'HOST': 'database.yourproject.com',
        'PORT': '3309',
        'OPTIONS': {'ssl': False},
    }

【问题讨论】:

  • 最好的解决方案是升级 RDS 中使用的 mySQL 版本。我的引擎版本 5.6.44 有这个问题,但 8.0.17 没有。 TLS 1.0 不再被认为是安全的,因此强制使用它对我来说似乎是一个 hacky 解决方案。
  • @mRyan 的评论是最好的答案,它对我有用

标签: mysql django ssl centos ubuntu-20.04


【解决方案1】:

mysqlclient 升级到 v2.X,其中添加了ssl_mode 选项,https://github.com/PyMySQL/mysqlclient-python/blob/main/HISTORY.rst

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'yamcha',
        'USER': 'yamcha',
        'PASSWORD': 'xxxxxxxxxxxxxxx',
        'HOST': 'database.yourproject.com',
        'PORT': '3309',
        'OPTIONS': {'ssl_mode': 'DISABLED'},
    }
}

【讨论】:

  • 对我来说,只需更新我的mysqlclient 版本就可以了。我没有更改 DATABASES 字典。
【解决方案2】:

如果您仍然想要升级的安全功能,那么您可以考虑将您的 mysql 服务器升级到 5.7。

【讨论】:

    【解决方案3】:

    如果您使用的是 MYSQL Workbench:

    只需通过编辑连接禁用 SSL。

    1. 在连接面板中编辑连接

    2. 在屏幕截图中给出的参数后的选项中选择 SSL 连接中

    1. 选择使用 SSL:否

    1. 最后会是这个样子。

    在 Mysql 工作台以外的客户端上,您也可以尝试禁用 SSL

    【讨论】:

    • 在工作台中设置此选项不会影响数据导出。它仍然失败并出现同样的错误。
    【解决方案4】:

    将此添加到您的 mysql 5.7 服务器配置文件中,然后重新启动您的 mysql 服务

    [mysqld]
    tls_version=TLSv1.2
    

    现在您应该可以使用 tls 1.2 连接到它,这是 Ubuntu 20.04 中的默认设置


    为了完整起见,在 Ubuntu 20.04 中,my.cnfmysql.cnf 实际上是同一个文件。所以编辑任何一个都可以。

    $ readlink -f /etc/mysql/my.cnf
    /etc/mysql/mysql.cnf
    

    【讨论】:

      【解决方案5】:

      对于任何使用谷歌搜索的人,您可以在 mysql cmd 中使用此标志: --ssl-mode=DISABLED。即:

      mysql -uuser -p'myPassw0rd!' -hmysql.company.com --ssl-mode=DISABLED
      

      【讨论】:

      • 我认为这对我来说是最好的答案,因为我不想编辑全局设置来连接到单个 SQL 实例。这提供了完美的临时解决方案,而不会影响其他任何东西。
      • 我确信这不是理想的解决方案,但与编辑 ssl confs 相比,这是一种快速的工作方式
      【解决方案6】:

      Ubuntu 20 提高了安全级别。 我可以连接的唯一方法是允许 tls 1 。

      编辑这个文件:

      /usr/lib/ssl/openssl.cnf
      

      并放在文件开头:

      openssl_conf = default_conf
      

      在那个文件的最后:

      [ default_conf ]
      
      ssl_conf = ssl_sect
      
      [ssl_sect]
      
      system_default = ssl_default_sect
      
      [ssl_default_sect]
      MinProtocol = TLSv1
      CipherString = DEFAULT:@SECLEVEL=1
      

      对我帮助很大:https://askubuntu.com/questions/1233186/ubuntu-20-04-how-to-set-lower-ssl-security-level

      【讨论】:

      • 我确实按照步骤进行了,但仍然是同样的问题,我只有通过 --ssl-mode=disabled 才能连接
      • 两天前你在哪里 ;-) 谢谢!
      • 非常感谢,对我帮助很大
      • 您也可以简单地将 mysqld 升级到 ssl 1.2,而不是降级您的 ssl 和潜在的安全级别。请参阅下面的this answer
      猜你喜欢
      • 1970-01-01
      • 2023-04-01
      • 2019-04-22
      • 2019-11-03
      • 1970-01-01
      • 1970-01-01
      • 2020-05-26
      • 2016-03-03
      • 1970-01-01
      相关资源
      最近更新 更多