通过SSL连接到MySQL获取ERROR 2026(HY000):SSL连接错误:协议版本不匹配

Shi*_*pai 9 mysql ssl openssl

我正在使用MySQL并生成证书以与MySQL一起使用以启用SSL.

这是SSL配置:

mysql> show variables like '%ssl%';
+---------------+----------------------------+
| Variable_name | Value                      |
+---------------+----------------------------+
| have_openssl  | YES                        |
| have_ssl      | YES                        |
| ssl_ca        | /etc/mysql/ca-cert.pem     |
| ssl_capath    |                            |
| ssl_cert      | /etc/mysql/server-cert.pem |
| ssl_cipher    |                            |
| ssl_key       | /etc/mysql/server-key.pem  |
+---------------+----------------------------+
7 rows in set (0.00 sec)
Run Code Online (Sandbox Code Playgroud)

它看起来工作正常,看起来我用MySQL服务器应用证书做得很好.

通过远程主机创建与MySQL服务器的连接存在问题.

mysql -u app1 -p -h 192.168.33.131 --ssl --ssl-capath=<path>/ssl/ --ssl-ca=<path>/ca-cert.pem --ssl-cert=<path>/client-cert.pem --ssl-key=<path>/client-key.pem
Enter password:
ERROR 2026 (HY000): SSL connection error: protocol version mismatch
Run Code Online (Sandbox Code Playgroud)

似乎有一些证书问题或可能是其他问题.

环境:

  OS:      Ubuntu 14.04
  MySQL:   5.5.41
  OpenSSL: OpenSSL 1.0.1f 6 Jan 2014
Run Code Online (Sandbox Code Playgroud)

Ale*_*lex 3

https://bugs.mysql.com/bug.php?id=64870

在底部:

如果您使用“openssl req -newkey rsa:2048 ...”来生成密钥,请注意,openssl 1.0 及更高版本现在以 PKCS#8 格式而不是 PKCS#1 存储私钥。

使 PKCS#8 成为私钥的默认写入格式,取代传统格式。这种形式是标准化的,更安全,并且不包含隐式 MD5 依赖性。[史蒂夫·汉森]

这些密钥将具有 PE​​M 标头,例如:

-----BEGIN PRIVATE KEY-----
Run Code Online (Sandbox Code Playgroud)

如果 MySQL 使用 YaSSL 作为其 SSL 实现进行编译(我相信这是默认设置),则这些密钥将不会加载,并且 MySQL 将在启动时抱怨: [Warning] Failed to setup SSL [Warning] SSL error: Unable to get private key

YaSSL 需要 PKCS#1 格式的 RSA 私钥,并带有 PEM 标头:

-----BEGIN RSA PRIVATE KEY-----
Run Code Online (Sandbox Code Playgroud)

网上的各种“建议”似乎建议您可以更改这些 PKCS#8 私钥的 PEM 页眉和页脚,以使它们能够与 MySQL/yaSSL 一起使用。这确实会阻止 MySQL 在启动时抱怨,但不幸的是,针对 MySQL 的 SSL 连接仍然会失败,如下所示:

**ERROR 2026 (HY000): SSL connection error: protocol version mismatch**
Run Code Online (Sandbox Code Playgroud)

要解决此问题,请使用“openssl rsa”将密钥转换为较旧的 PKCS#1 RSAPrivateKey 格式。 $ openssl rsa -in key-from-openssl-1.pem -out pkcs1-yassl-compatible-key.pem