如何通过SSL连接到Amazon RDS?

Jac*_*ies 18 php mysql database ssl amazon-rds

我正在尝试建立与通过Amazon RDS托管的MySQL数据库的SSL连接.我对如何连接感到困惑.

根据亚马逊的文档,我需要下载一个名为"rds-ca-2015-root.pem"的CA证书,并在我的SSL连接中使用它.我将我要连接的数据库用户设置为需要SSL.

在PHP中,我包含以下代码以启动连接:

$mysqli = mysqli_init();
mysqli_options($mysqli, MYSQLI_OPT_SSL_VERIFY_SERVER_CERT, true);
$mysqli->ssl_set(NULL, NULL, "/path/to/pem", NULL, NULL);
$mysqli->real_connect("host", "username", "password", "name", 3306, NULL, MYSQLI_CLIENT_SSL);
Run Code Online (Sandbox Code Playgroud)

但是,无论我在ssl_set()中指定哪条路径作为第三个参数(即使路径无效),也会成功建立SSL连接.第三个参数不能设置为NULL.

我通过运行此查询来验证这一点:SHOW STATUS LIKE 'Ssl_cipher';.输出验证连接是否已加密(Ssl_cipher => AES256-SHA).

有人可以向我解释这是如何工作的吗?我很困惑为什么当路径不正确时连接继续成功.如何验证RDS服务器?

Ian*_*Ian 1

RDS 文档实际上解释了为什么会发生这种情况,并建议您甚至不需要 CA 证书:

Amazon RDS 于 2015 年 3 月 23 日开始更新所有数据库实例上的 SSL 证书,但没有启动实例的重新启动。执行这些更新时不会产生操作影响或停机,并且在许多情况下,我们将在您的维护时段内执行更新。如果您已执行更新,Amazon RDS 将不会更新您的实例的证书。另请注意,Amazon RDS 不会更新 AWS GovCloud(美国)和中国(北京)区域的证书。

无论您手动更新证书还是 Amazon RDS 更新证书,都必须重新启动数据库实例才能使新证书生效。您可以决定何时手动重新启动数据库实例,但必须在旧证书 (rds-ca-2010) 于 2015 年 4 月 3 日到期之前更新证书并重新启动实例。

您可以使用 Amazon RDS 控制台检查数据库实例使用的证书颁发机构 (CA)。CA 列在数据库实例详细信息的安全和网络部分下。如果您的实例显示 rds-ca-2015,则新证书已成功应用。您仍然需要重新启动数据库实例并更新客户端应用程序以使用新的 SSL 证书。

如果 Amazon RDS 控制台将您的实例 CA 显示为 rds-ca-2010,则新证书尚未应用于您的数据库实例。使用以下说明更新数据库实例上的 SSL 证书。

第三个参数基本上被客户端忽略。我打赌将第三个参数设置为,如果所有参数都为空,NULL则调用没有意义。mysqli::ssl_set()

尝试完全删除该函数调用。