如何通过SSL连接到AmazonRDS?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (1)
  • 关注 (0)
  • 查看 (55)

我正在尝试建立与通过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);

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

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

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

提问于
用户回答回答于

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证书。

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

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

扫码关注云+社区

领取腾讯云代金券