我正在尝试建立与通过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服务器?
答案 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()
没有意义。
尝试完全删除该函数调用。