【问题标题】:Connecting to MySQL server with ssl使用 ssl 连接到 MySQL 服务器
【发布时间】:2016-04-27 00:16:09
【问题描述】:

所以我需要通过 SSL 连接到 MySQL 服务器。我在服务器和客户端上都有 root 访问权限。服务器和客户端的操作系统都是 Ubuntu Linux。服务器正在运行 MySQL 5.5.46。

我按照以下说明生成了证书:

http://dev.mysql.com/doc/refman/5.5/en/creating-ssl-files-using-openssl.html

这创建了八个 .pem 文件。我成功地让服务器在启用 SSL 的情况下运行。我知道,因为如果我在服务器上得到 MySQL 提示并运行:

mysql> show global variables like 'have_%ssl';

我明白了:

+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| have_openssl  | YES   |
| have_ssl      | YES   |
+---------------+-------+

我还为将要连接到该服务器的用户设置了正确的权限。我知道,因为如果我这样做:

show grants for <username>

我得到了一个带有“REQUIRE SSL”的 GRANT 语句。所以我真的认为服务器端很好。

从客户端连接是问题所在。如果我像这样使用“-p”选项,我可以做到这一点:

$ mysql --ssl-ca=./path/to/ca.pem -h <hostname> -u <username> -D <databasename> -p

然后我会提示我输入密码,如果我输入密码,我就可以连接。

但是我需要自动化这个连接,并且将密码附加到上面的行是一个坏主意(而且永远不会工作 - 我也想知道)。

那么,如何在不硬编码密码的情况下以自动化方式安全地连接到客户端?当我按照上面链接中的说明生成证书时,我得到了八个 .pem 文档,其中大部分我没有使用。我需要使用 client-key.pem 吗?客户证书.pem?请注意,在命令行上传递到其他证书的路径不起作用。也就是这个:

mysql --ssl-ca=./ca.pem --ssl-cert=./client-cert.pem --ssl-key=./client-key.pem -h <hostname> -u <username> -D <databasename>

与上述所有其他组合一样失败:“访问被拒绝”

非常感谢任何帮助。

【问题讨论】:

    标签: mysql ssl connection certificate ssl-certificate


    【解决方案1】:
    mysql> GRANT ALL PRIVILEGES ON database.* to user REQUIRE X509;
    

    尝试使用带有 REQUIRE X509 的 GRANT 而不是 REQUIRE SSL 并省略 IDENTIFIED BY 子句。 X509 要求客户端提交 ssl-cert。证书必须由服务器端 MySQL 配置文件中指定的 ssl-ca(证书颁发机构)签名。换言之,这将要求服务器验证客户端是否拥有密钥,并且该密钥已由服务器的 CA 签名。

    对于上述设置,您将需要客户端密钥和客户端证书。客户端证书将被发送到服务器以验证您的客户端,客户端密钥将用于解密来自服务器的消息。在此设置中您不需要 ca.pem,但如果包含它,服务器的证书将根据 ca.pem 文件进行验证。

    【讨论】:

    • 我要在这里补充一点。如果您只想执行此语句的 SSL 部分而不执行 ALL PRIVILEGES 部分(有时您不执行),请改用 USAGE。所以 GRANT USAGE ON database.* 给用户 REQUIRE X509
    猜你喜欢
    • 2020-09-13
    • 1970-01-01
    • 2012-04-02
    • 1970-01-01
    • 2018-12-12
    • 2010-09-24
    • 1970-01-01
    • 2011-01-01
    相关资源
    最近更新 更多