为 MySQL 命令行客户端加密连接生成 SSL 密钥

Generating SSL keys for MySQL command-line client encrypted connection

我已经在云中使用 MySQL 启动了一个项目,我需要为 MySQL 命令行客户端建立一个到它的 SSL 连接。

我从 MySQL 服务器收到了 ca.pem 文件,其中有大量证书。

我已经在 MySQL Workbench 和 Java 中解决了 SSL 连接,经过一定数量的尝试不同的事情。我现在在我的 Java 安装的 cacerts 信任库中拥有所有证书,并且我已经配置 Java 和 Workbench 以在我的 client.jks商店。

None 虽然有助于命令行 MySQL 客户端。根据 MySQL 文档 Configuring MySQL to use Secure Connections,这是启动它的方式:

mysql --ssl-ca=ca.pem \
   --ssl-cert=client-cert.pem \
   --ssl-key=client-key.pem

这些参数可以放在my.cnf中,使命令行更简单。

这告诉了我一些我需要知道的事情:MySQL on Amazon RDS 即如何在命令行上将 mysql 指向服务器证书。这很容易,考虑到 Java 过程要求我使用命令行工具将所有证书导入 Java 证书存储区,该工具仅读取第一个证书并默默地忽略其余部分。

所以在使用 Java 之后,从一开始就有 ssh 的 public/private 密钥对,我想到将所有密钥放在一起是明智的事实上,甚至可以重复使用同一个密钥来创建我需要的其他格式。

根据 Converting a Java Keystore into PEM Format 我应该能够做到这一点,或者我应该改用 SSH 键?他们都有相同的 Country/State/Locality/Org/Unit/Name/Email.

MySQL 文档 Creating SSL Certificates and Keys Using OpenSSL 说我需要这样做:

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
openssl verify -CAfile ca.pem server-cert.pem client-cert.pem

这是有问题的,因为我没有生成 AWS 证书,而且我只从那里获得了一个 pem 文件。也许 AWS ca.pem 和 server-cert.pem 都在一个 pem 文件中——我想我可以检查一下,但我必须去挖掘关于他们使用哪个 CA 签名授权的信息,这样我才能识别 CA 证书。我猜 'server-cert' 是我得到的实际主机的 public 密钥。

但是它不起作用,我收到以下错误:

$ openssl.exe x509 -req -in client-req.pem -days 3600 
        -CA rds-combined-ca-bundle.pem -CAkey rds-combined-ca-bundle.pem 
        -set_serial 01 -out client-cert.pem
Signature ok
subject=/C=UK/ST=LN/L=LN/O=X/OU=XYZ/CN=xyz/emailAddress=adam@me.com
Getting CA Private Key
unable to load CA Private Key
4294956672:error:0906D06C:PEM routines:PEM_read_bio:no start 
        line:pem_lib.c:707:Expecting: ANY PRIVATE KEY

原来 SSL 证书是一个转移注意力的问题。你不需要它们。你只需要这个:

mysql -h myinstance.c9akciq32.rds-us-east-1.amazonaws.com
    --ssl-ca=[full path]rds-combined-ca-bundle.pem --ssl-verify-server-cert

这是 Cygwin 和标准 Windows MySQL 客户端不能一起玩,因此在尝试启动时挂起:connecting to mysql from cygwin