我正在使用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)
https://bugs.mysql.com/bug.php?id=64870
在底部:
如果您使用“openssl req -newkey rsa:2048 ...”来生成密钥,请注意,openssl 1.0 及更高版本现在以 PKCS#8 格式而不是 PKCS#1 存储私钥。
使 PKCS#8 成为私钥的默认写入格式,取代传统格式。这种形式是标准化的,更安全,并且不包含隐式 MD5 依赖性。[史蒂夫·汉森]
这些密钥将具有 PEM 标头,例如:
Run Code Online (Sandbox Code Playgroud)-----BEGIN PRIVATE KEY-----如果 MySQL 使用 YaSSL 作为其 SSL 实现进行编译(我相信这是默认设置),则这些密钥将不会加载,并且 MySQL 将在启动时抱怨: [Warning] Failed to setup SSL [Warning] SSL error: Unable to get private key
YaSSL 需要 PKCS#1 格式的 RSA 私钥,并带有 PEM 标头:
Run Code Online (Sandbox Code Playgroud)-----BEGIN RSA PRIVATE KEY-----网上的各种“建议”似乎建议您可以更改这些 PKCS#8 私钥的 PEM 页眉和页脚,以使它们能够与 MySQL/yaSSL 一起使用。这确实会阻止 MySQL 在启动时抱怨,但不幸的是,针对 MySQL 的 SSL 连接仍然会失败,如下所示:
Run Code Online (Sandbox Code Playgroud)**ERROR 2026 (HY000): SSL connection error: protocol version mismatch**要解决此问题,请使用“openssl rsa”将密钥转换为较旧的 PKCS#1 RSAPrivateKey 格式。
$ openssl rsa -in key-from-openssl-1.pem -out pkcs1-yassl-compatible-key.pem