Ubuntu 20.04 出现 SSL_connect: error:1425F102 .. unsupported protocol 问题的解决

环境 ubuntu 20.04、MySQL 5.7.26

g@g:~$ mysql --protocol=tcp --port=23306 --host=localhost --user=root --password=6Zdoqkrh2ZROE7xefQKgVGKMzzuznxxJ
mysql: [Warning] Using a password on the command line interface can be insecure.
ERROR 2026 (HY000): SSL connection error: error:1425F102:SSL routines:ssl_choose_client_version:unsupported protocol

这个错误在 19.xx 时并不存在, 其原因是在 Ubuntu 20.04 中, OpenSSL 升级到了 1.1.1f, 将 TLS 最低版本设置为了 1.2

https://launchpad.net/ubuntu/+source/openssl/+changelog

  * Set OPENSSL_TLS_SECURITY_LEVEL=2 as compiled-in minimum security
    level. Change meaning of SECURITY_LEVEL=2 to prohibit TLS versions
    below 1.2 and update documentation. Previous default of 1, can be set
    by calling SSL_CTX_set_security_level(), SSL_set_security_level() or
    using ':@SECLEVEL=1' CipherString value in openssl.cfg.

解决问题的最好办法当然是升级服务器的 TLS 版本到 1.2,对于无法升级服务器的,只能降低 OpenSSL 的 TLS 版本要求

在 Ubuntu 20.04 上的修改为, 打开 /etc/ssl/openssl.cnf, 找到这行

oid_section             = new_oids

在这行下面紧接着添加下面几句

openssl_conf = default_conf
 
[default_conf]
ssl_conf = ssl_sect
 
[ssl_sect]
system_default = system_default_sect
 
[system_default_sect]
MinProtocol = TLSv1.1
CipherString = DEFAULT@SECLEVEL=1

然后 MySQL 重新打开, 就可以连接了。