我正在尝试创建一些用于 MySQL 的证书,如果我使用 sha1 算法,一切都会正常工作。如果我添加 -sha256 开关或 -sha384,我将无法连接到 MySQL!我收到此错误:错误 2026 (HY000):SSL 连接错误:ASN:其他签名确认错误
我发现了类似的问题这里但可接受的解决方案是使用 -sha1。我想使用 sha2,因为 Microsoft、Google 和 Firefox 不再建议使用 sha1。
这是我用来创建密钥的方法。如果我删除 -sha256 开关,使用 sha1 就可以正常工作。我也尝试过使用 2048 位密钥,同样的问题
openssl genrsa 4096 > ca-key.pem
openssl req -sha256 -new -x509 -nodes -days 10000 -key ca-key.pem -out ca-cert.pem
openssl req -sha256 -newkey rsa:4096 -days 10000 -nodes -keyout server-key.pem -out server-req.pem
openssl rsa -in server-key.pem -out server-key.pem
openssl x509 -req -sha256 -in server-req.pem -days 10000 -CA ca-cert.pem -CAkey ca-key.pem -set_serial 01 -out server-cert.pem
openssl req -sha256 -newkey rsa:4096 -days 10000 -nodes -keyout client-key.pem -out client-req.pem
openssl rsa -in client-key.pem -out client-key.pem
openssl x509 -req -sha256 -in client-req.pem -days 10000 -CA ca-cert.pem -CAkey ca-key.pem -set_serial 01 -out client-cert.pem
证书验证无问题
openssl verify -CAfile ca-cert.pem server-cert.pem client-cert.pem
结果:
server-cert.pem: OK
client-cert.pem: OK
我的cnf
[mysqld]
ssl = On
ssl-cipher = DHE-RSA-AES256-SHA
ssl-ca = /etc/mysql/ssl/ca-cert.pem
ssl-cert = /etc/mysql/ssl/server-cert.pem
ssl-key = /etc/mysql/ssl/server-key.pem
使用 MySQL 5.5.40
mysql>SELECT version()
5.5.40-0+wheezy1
SSL 变量看起来没问题
mysql> show variables like '%ssl%';
Variable_name Value
ssl_key /etc/mysql/ssl/server-key.pem
ssl_cipher DHE-RSA-AES256-SHA
ssl_cert /etc/mysql/ssl/server-cert.pem
ssl_capath
ssl_ca /etc/mysql/ssl/ca-cert.pem
have_ssl YES
have_openssl YES
Openssl 版本
~ $ openssl version
OpenSSL 1.0.1e 11 Feb 2013
答案1
我已经解决了这个问题。
我收到了错误:错误 2026 (HY000):SSL 连接错误:ASN:其他签名确认错误当我连接 HeidiSQL 版本 8.3.0.4694 时。我没有提到这一点,因为我认为这不相关。
我尝试使用 PHP 5.6.2 中的 mysqli 和 ssl_set 函数进行连接,并且成功了。
所以问题不在于 MySQL。然后我安装了 HeidiSQL 9.0.0.4865,它使用 sha256 证书完美连接