如何通过SSL连接到Amazon RDS?

时间:2015-08-05 05:14:07

标签: php mysql database ssl amazon-rds

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

根据亚马逊的documentation,我需要下载名为“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服务器?

1 个答案:

答案 0 :(得分:2)

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

  

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

     

无论您是手动更新证书还是亚马逊   RDS更新了证书,必须重新启动数据库实例   新证书生效。你可以决定什么时候   手动重启数据库实例,但您必须更新证书   并在旧证书之前重新启动实例(rds-ca-2010)   将于2015年4月3日到期。

     

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

     

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

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

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