如何强制MySQL客户端在登录时发送SSL证书

问题描述 投票:0回答:1

我有一台运行 PHP 7.2(应用程序服务器)的服务器,另一台运行 MySQL 8.0(数据库服务器)的服务器。我的要求是,任何用户在不提供证书的情况下都不能从任何服务器登录MySQL。经过一些互联网研究,我在 my.cnf 文件中添加了以下配置。

[mysqld]
ssl-ca=/path/to/ca.pem
ssl-cert=/path/to/server-cert.pem
ssl-key=/path/to/server-key.pem

此后,当我检查 VARIABLES LIKE '%SSL%' 时,我可以看到 SSL 已启用。但是从我的应用程序服务器终端,我可以在提供或不提供任何证书文件的情况下登录数据库服务器上的 MySQL。更奇怪的是,当我尝试使用 PDO 或 mysqli 从 PHP 连接时,无法连接。 PDO 没有给出任何错误,但在 mysqli 中,我得到的对等证书 CN=localhost 与预期 CN 不匹配。因此,我认为我的流量是 SSL 加密的,并且以 https 的方式工作,但身份验证并不强制用户在登录时使用 SSL 证书。我需要做什么才能强制客户端在登录时发送证书?我使用的是我用

Require SSL
创建的用户帐户。

php mysql ssl openssl
1个回答
0
投票
// following will force SSL connection
//alter user root@'%' REQUIRE  SSL; 

// following will force SSL connection with the certificate, else connection will be rejected
alter user root@'%' REQUIRE  X509; 

REQUIRE SSL 表示单向 TLS 身份验证:MySQL 客户端必须验证服务器的证书是否由其信任的证书颁发机构签名。不需要客户端证书。所有流量均完全加密。

REQUIRE X509表示双向TLS(相互认证):除了上述之外,MySQL服务器还必须信任签署客户端证书的证书颁发机构。

这两种方法都完全加密数据库流量。第二种策略阻止拥有密码但没有受信任证书的人进行连接。

© www.soinside.com 2019 - 2024. All rights reserved.