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

时间:2015-02-24 11:03:54

标签: mysql ssl openssl

我正在使用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)

它看起来工作正常,看起来我在将这些证书应用于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

似乎在证书方面存在一些问题,或者可能是其他问题。

环境:

  OS:      Ubuntu 14.04
  MySQL:   5.5.41
  OpenSSL: OpenSSL 1.0.1f 6 Jan 2014

1 个答案:

答案 0 :(得分:3)

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

在底部:

  

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

     

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

     

这些键将具有PEM标题,例如:

-----BEGIN PRIVATE KEY-----
     

如果使用YaSSL编译MySQL作为其SSL实现(我   相信是默认的),这些密钥不会加载,MySQL会抱怨   在启动时:[警告]无法设置SSL [警告] SSL错误:   无法获取私钥

     

YaSSL期望使用PEM的PKCS#1格式的RSA私钥   头:

-----BEGIN RSA PRIVATE KEY-----
     

在线各种“建议”似乎表明您可以更改PEM   这些PKCS#8私钥的页眉和页脚让他们工作   使用MySQL / yaSSL。这确实会阻止MySQL抱怨   启动,但遗憾的是,与MySQL的SSL连接仍然存在   失败的原因如下:

**ERROR 2026 (HY000): SSL connection error: protocol version mismatch**
     

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