设置 MySQL SSL 连接
Setting up MySQL SSL connections
我的任务是对 MySQL 的所有本地和远程连接进行加密,并且所有客户端都必须通过客户端 SSL 证书进行验证。
但我什至无法从 shell 连接到 MySQL,并且总是收到 'Access denied for user ssluser@localhost
...)'
平台:
- 带有 Amazon Linux AMI 的 Amazon EC2 micro(已安装所有更新)
- MySQL 5.7.7
我已经根据this instruction
创建了自签名证书
# Create CA certificate
# -----------
# CN = localdomain.com
$ openssl genrsa 2048 > ca-key.pem
$ openssl req -new -x509 -nodes -days 3600 -key ca-key.pem -out ca.pem
# Create server certificate, remove passphrase, and sign it
# server-cert.pem = public key, server-key.pem = private key
# -----------
# CN = cn1.localdomain.com
$ openssl req -newkey rsa:2048 -days 3600 -nodes -keyout server-key.pem -out server-req.pem
$ openssl rsa -in server-key.pem -out server-key.pem
$ openssl x509 -req -in server-req.pem -days 3600 -CA ca.pem -CAkey ca-key.pem -set_serial 01 -out server-cert.pem
# Create client certificate, remove passphrase, and sign it
# client-cert.pem = public key, client-key.pem = private key
# -----------
# CN = cn2.localdomain.com
$ openssl req -newkey rsa:2048 -days 3600 -nodes -keyout client-key.pem -out client-req.pem
$ openssl rsa -in client-key.pem -out client-key.pem
$ openssl x509 -req -in client-req.pem -days 3600 -CA ca.pem -CAkey ca-key.pem -set_serial 01 -out client-cert.pem
我已经创建了 MySQL 数据库用户用于测试
CREATE USER 'ssl-user'@'%' identified by '123';
GRANT USAGE ON *.* TO 'ssluser'@'%' identified by '123' REQUIRE X509;
FLUSH PRIVILEGES;
已编辑my.cnf
[mysqld]
ssl-ca=/etc/pki/mysql_ssl/ca.pem
ssl-cert=/etc/pki/mysql_ssl/server-cert.pem
ssl-key=/etc/pki/mysql_ssl/server-key.pem
[client]
ssl-cert=/etc/pki/mysql_ssl/client-cert.pem
ssl-key=/etc/pki/mysql_ssl/client-key.pem
并重新启动 mysqld...
我正在尝试从 shell
连接
mysql -ussluser -p123123123 --ssl-cert=/etc/pki/mysql_ssl/client-cert.pem --ssl-key=/etc/pki/mysql_ssl/client-key.pem
并且总是得到“ssluser@localhost
的访问被拒绝(使用密码:是)。
我还尝试使用我们购买的 WildCard Comodo 证书仅加密连接(但不验证客户端)但没有成功。
我有点困惑,因为我知道实际上很多人都在使用 MySQL SSL,但我仍然无法让它工作。
任何帮助将不胜感激。
问题已解决。
- 我换回了MySQL5.6
- 使用 this detailed instruction
重新创建了 CA、服务器和客户端证书
已添加到 my.cnf 客户端 SSL 部分
[client]
ssl-ca=/etc/pki/mysql_ssl/ca-cert.pem
ssl-cert=/etc/pki/mysql_ssl/client-cert.pem
ssl-key=/etc/pki/mysql_ssl/сlient-key.pem
创建了新 mysql 用户
CREATE USER 'x509test'@'%' IDENTIFIED BY 'MyPassword1';
GRANT USAGE ON *.* TO 'x509test'@'%' REQUIRE X509;
FLUSH PRIVILEGES;
终于可以连接了
$ mysql --user=x509test --password --ssl-ca=/etc/pki/mysql_ssl/ca-cert.pem --ssl-cert=/etc/pki/mysql_ssl/client-cert.pem --ssl-key=/etc/pki/mysql_ssl/client-key.pem
我的任务是对 MySQL 的所有本地和远程连接进行加密,并且所有客户端都必须通过客户端 SSL 证书进行验证。
但我什至无法从 shell 连接到 MySQL,并且总是收到 'Access denied for user ssluser@localhost
...)'
平台:
- 带有 Amazon Linux AMI 的 Amazon EC2 micro(已安装所有更新)
- MySQL 5.7.7
我已经根据this instruction
创建了自签名证书# Create CA certificate
# -----------
# CN = localdomain.com
$ openssl genrsa 2048 > ca-key.pem
$ openssl req -new -x509 -nodes -days 3600 -key ca-key.pem -out ca.pem
# Create server certificate, remove passphrase, and sign it
# server-cert.pem = public key, server-key.pem = private key
# -----------
# CN = cn1.localdomain.com
$ openssl req -newkey rsa:2048 -days 3600 -nodes -keyout server-key.pem -out server-req.pem
$ openssl rsa -in server-key.pem -out server-key.pem
$ openssl x509 -req -in server-req.pem -days 3600 -CA ca.pem -CAkey ca-key.pem -set_serial 01 -out server-cert.pem
# Create client certificate, remove passphrase, and sign it
# client-cert.pem = public key, client-key.pem = private key
# -----------
# CN = cn2.localdomain.com
$ openssl req -newkey rsa:2048 -days 3600 -nodes -keyout client-key.pem -out client-req.pem
$ openssl rsa -in client-key.pem -out client-key.pem
$ openssl x509 -req -in client-req.pem -days 3600 -CA ca.pem -CAkey ca-key.pem -set_serial 01 -out client-cert.pem
我已经创建了 MySQL 数据库用户用于测试
CREATE USER 'ssl-user'@'%' identified by '123';
GRANT USAGE ON *.* TO 'ssluser'@'%' identified by '123' REQUIRE X509;
FLUSH PRIVILEGES;
已编辑my.cnf
[mysqld]
ssl-ca=/etc/pki/mysql_ssl/ca.pem
ssl-cert=/etc/pki/mysql_ssl/server-cert.pem
ssl-key=/etc/pki/mysql_ssl/server-key.pem
[client]
ssl-cert=/etc/pki/mysql_ssl/client-cert.pem
ssl-key=/etc/pki/mysql_ssl/client-key.pem
并重新启动 mysqld...
我正在尝试从 shell
连接mysql -ussluser -p123123123 --ssl-cert=/etc/pki/mysql_ssl/client-cert.pem --ssl-key=/etc/pki/mysql_ssl/client-key.pem
并且总是得到“ssluser@localhost
的访问被拒绝(使用密码:是)。
我还尝试使用我们购买的 WildCard Comodo 证书仅加密连接(但不验证客户端)但没有成功。
我有点困惑,因为我知道实际上很多人都在使用 MySQL SSL,但我仍然无法让它工作。 任何帮助将不胜感激。
问题已解决。
- 我换回了MySQL5.6
- 使用 this detailed instruction 重新创建了 CA、服务器和客户端证书
已添加到 my.cnf 客户端 SSL 部分
[client] ssl-ca=/etc/pki/mysql_ssl/ca-cert.pem ssl-cert=/etc/pki/mysql_ssl/client-cert.pem ssl-key=/etc/pki/mysql_ssl/сlient-key.pem
创建了新 mysql 用户
CREATE USER 'x509test'@'%' IDENTIFIED BY 'MyPassword1'; GRANT USAGE ON *.* TO 'x509test'@'%' REQUIRE X509; FLUSH PRIVILEGES;
终于可以连接了
$ mysql --user=x509test --password --ssl-ca=/etc/pki/mysql_ssl/ca-cert.pem --ssl-cert=/etc/pki/mysql_ssl/client-cert.pem --ssl-key=/etc/pki/mysql_ssl/client-key.pem