mysql - 设置 MySQL SSL 连接

标签 mysql ssl amazon-ec2

我的任务是对所有本地和远程 MySQL 连接进行加密,并且所有客户端都必须通过客户端 SSL 证书进行验证。

但我什至无法从 shell 连接到 MySQL,并且总是收到“用户 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 DB 用户

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 的访问被拒绝(使用密码:YES)”。

我还尝试使用我们购买的 WildCard Comodo 证书仅加密连接(但不验证客户端)但没有成功。

我有点困惑,因为我知道很多人实际上都在做 MySQL SSL,但我仍然无法让它工作。 任何帮助将不胜感激。

最佳答案

问题解决了。

  • 我切换回 MySQL 5.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 - 设置 MySQL SSL 连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29989010/

相关文章:

php - 提高以下小代码的性能

mysql - 使用时间维度的查询忽略 "where"子句中的条件

php - 为什么这个 mysql 查询在 php 中不起作用

ssl - 如果我使用来自非 SSL 网站的 API,浏览器是否需要给出混合内容错误?

mysql - 如果一列已经是 auto_increment,如何使第二列递增?

ruby-on-rails - Rails 中的部分 SSL

ssl - nginx fastcgi 获取 SSL 信息?

amazon-ec2 - Amazon 系统镜像 (AMI) 是不可变的吗?

ubuntu - 云平台- sudo : unable to resolve host

java - 使用JAVA为EC2实例设置标签