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

时间:2017-05-19 16:50:34

标签: java mysql amazon-web-services ssl ssh-keys

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

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

在经过一定程度的尝试后,我已经在MySQL Workbench和Java中整理了SSL连接。我现在已经在我的Java安装的cacerts信任库中获得了所有证书,并且我已经配置了Java和Workbench来在我的client.jks存储中找到我的公钥/私钥SSL密钥。

这些都不利于命令行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的公钥/私钥对,我突然意识到将所有密钥保持在一起并且实际上甚至重新使用它是明智的。同样的关键,以创建我需要的其他格式。

根据Converting a Java Keystore into PEM Format我应该可以这样做,或者我应该使用SSH键?他们都共享相同的国家/州/地区/组织/单位/名称/电子邮件。

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'是来自我所拥有的实际主机的公钥。

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

$ 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

1 个答案:

答案 0 :(得分:0)

原来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