我正在使用 openssl 生成 ssl 证书,并使用该证书通过 SSL 加密连接到 mysql。当我从本地主机环境连接时,此方法运行良好(即使我通过服务器公共 IP 连接,我也已从 Web 服务器框成功连接)。但是,当我尝试从本地开发计算机连接时,出现 SSL 错误。
从托管平台连接时
mysql -u 指标 -p -h 45.33.xx --ssl-key=客户端密钥.pem --ssl-ca=ca.pem --ssl-cert=客户端证书.pem 输入密码: 欢迎使用 MySQL 监视器。命令以 ; 或 \g 结尾。 您的 MySQL 连接 ID 是 136 ...
从 Mac 开发机连接时,我使用 scp 将证书/密钥文件复制到我的开发机
mysql -u 指标 -h 45.33.xx -p --ssl-key=客户端密钥.pem --ssl-cert=客户端证书.pem --ssl-ca=ca.pem 输入密码: 错误 2026 (HY000):SSL 连接错误:错误:00000001:lib(0):func(0):原因(1)
以下是我为解决这个问题所做的事情
- 我已经在服务器和本地机器上生成了 cert/key/ca 的校验和,它们是相同的
- 我看过无法使用 SSL 连接到 MySQL 5.5服务器故障问题 没有办法解决问题
- 我有调试 SSL通过启动 openSSL 服务器(在 mysql 服务器上)并从我的本地机器连接,再次没有问题。
如果有什么不同的话,那么所有服务器都运行的是 ubuntu 14.04 和 openSSL“OpenSSL 1.0.1f 6 Jan 2014”,而我则是从 osX 10.10.4 连接,使用的 openSSL 是“OpenSSL 1.0.2c 12 Jun 2015”
那么有什么想法吗?
答案1
这看起来像是与密码相关的问题。请尝试在服务器和客户端上添加选项:--ssl-cipher=AES128-SHA
。您可以使用输出中双方都存在的任何其他套件openssl ciphers HIGH
。
MySQL 客户端配置文件也可能包含ssl-verify-server-cert
选项,如果是这样,请删除它或(更安全)使用来自服务器证书 CN 的域名。
如果仍然失败,您可以:
- 使用 tcpdump 或 Wireshark 嗅探您的连接,查看 TLS 握手。
- 解决问题隧道或 VPN。
答案2
如果没有看到证书,这一切都只是猜测。
但这个看起来非常相关:https://dev.mysql.com/doc/refman/5.0/en/creating-ssl-files-using-openssl.html
简而言之,客户端证书 CN 必须与 CA CN 不同。
本文件中的关键词“必须”、“不得”、“要求”、“应”、“不应”、“应该”、“不应该”、“建议”、“可以”和“可选”应按以下方式解释:[RFC 2119]。