【发布时间】:2015-10-27 17:20:30
【问题描述】:
我正在尝试建立与通过 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 服务器?
【问题讨论】:
-
如果你在 Unix 机器上运行它,这取决于你使用的 OpenSSL 的风格和配置,有一个目录保存你的系统范围的证书。 Openssl 将在该路径中查找适当的证书。这里不清楚的是(假设您在 unix 机器上)您是否已将证书放在该目录中。如果您已成功连接,则必须拥有。您可以在此处获取有关特定目录位置的更多信息:serverfault.com/questions/62496/…
-
我在这里(来自 EC2)实例进行了相当多的测试,看起来甚至不需要设置 PEM 公钥路径的行,也不需要包含AWS 文档中的 PEM,用于通过命令行进行连接。这意味着@mba12 是正确的,因为 RDS 证书必须已经存在于实例中的某个位置,并且不需要被引用。如果我不正确地引用它们,那么是的,它会中断。您是否从 AWS VPC 外部对此进行测试?
-
@RobbieAverill 自从我经常使用 AWS 以来已经有一年左右的时间了,但是当我这样做时,我总是使用 PEM 文件并指定路径。我从未尝试将 PEM 文件集成到专门用于 AWS 的 openssl 中。但是对于其他将证书放入 OpenSSL 默认目录的通用 linux 机器来说效果很好。你只需要小心让你的特定盒子的 openssl 配置正确。那是唯一让我有点问题的东西。正如我提到的,openssl 有几种口味。
-
@Jack Humphries,你现在有很多后续/后续问题。如果你能回答他们会很好,这样我们就可以尝试回答你的问题。
-
您将 .pem 文件上传到服务器的哪个位置?
标签: php mysql database ssl amazon-rds