我正在尝试在内核3.13.0-32-generic的Ubuntu 14.04 Linux(64位)上建立一个支持SSL的mysql服务器5.5.38-0ubuntu0.14.04.1.
我允许远程访问mysql并更改/etc/mysql/my.cnf以支持ssl ...
ssl=1 ssl-ca=/etc/mysql/ca-cert.pem ssl-cert=/etc/mysql/server-cert.pem ssl-key=/etc/mysql/server-key.pem
我生成了证书......
openssl genrsa 2048 > ca-key.pem openssl req -new -x509 -nodes -days 3650 -key ca-key.pem > ca-cert.pem openssl req -newkey rsa:2048 -days 3560 -nodes -keyout server-key.pem > server-req.pem openssl rsa -in server-key.pem -out server-key.pem openssl x509 -req -in server-req.pem -days 3650 -CA ca-cert.pem -CAkey ca-key.pem -set_serial 01 > server-cert.pem openssl req -newkey rsa:2048 -days 3650 -nodes -keyout client-key.pem > client-req.pem openssl rsa -in client-key.pem -out client-key.pem openssl x509 -req -in client-req.pem -days 3650 -CA ca-cert.pem -CAkey ca-key.pem -set_serial 01 > client-cert.pem
我有用于服务器和客户端证书/密钥的Common Name值的不同名称.在某些情况下,相同的名称似乎是个问题.
我正确设置了/ etc/mysql /中所有*.pem文件(mysql:adm)的permisions.在重新启动mysql之后,我可以以root身份登录并看到现在支持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)
所以..我生成了一个测试用户来测试ssl连接:
mysql> GRANT ALL PRIVILEGES ON *.* TO 'ssluser'@'localhost' IDENTIFIED BY 'password' REQUIRE X509; mysql> flush privileges;
但是,当我尝试连接时......
# mysql -u ssluser -p --ssl-ca=ca-cert.pem --ssl-cert=client-cert.pem --ssl-key=client-key.pem Enter password: ERROR 2026 (HY000): SSL connection error: ASN: bad other signature confirmation
但是,我的证书似乎是有效的:
# openssl verify -CAfile ca-cert.pem server-cert.pem client cert.pem server-cert.pem: OK client-cert.pem: OK
几个小时后我试图解决这个问题,现在我没有任何新的想法..非常感谢帮助!
已解决:一旦使用SHA1生成密钥,即可使用
# Generate a CA key and certificate with SHA1 digest
openssl genrsa 2048 > ca-key.pem
openssl req -sha1 -new -x509 -nodes -days 3650 -key ca-key.pem > ca-cert.pem
# Create server key and certficate with SHA1 digest, sign it and convert
# the RSA key from PKCS #8 (OpenSSL 1.0 and newer) to the old PKCS #1 format
openssl req -sha1 -newkey rsa:2048 -days 730 -nodes -keyout server-key.pem > server-req.pem
openssl x509 -sha1 -req -in server-req.pem -days 730 -CA ca-cert.pem -CAkey ca-key.pem -set_serial 01 > server-cert.pem
openssl rsa -in server-key.pem -out server-key.pem
# Create client key and certificate with SHA digest, sign it and convert
# the RSA key from PKCS #8 (OpenSSL 1.0 and newer) to the old PKCS #1 format
openssl req -sha1 -newkey rsa:2048 -days 730 -nodes -keyout client-key.pem > client-req.pem
openssl x509 -sha1 -req -in client-req.pem -days 730 -CA ca-cert.pem -CAkey ca-key.pem -set_serial 01 > client-cert.pem
openssl rsa -in client-key.pem -out client-key.pem