如何通过 SSL 上的 PHP 连接到 Amazon MySQL RDS 实例

Posted

技术标签:

【中文标题】如何通过 SSL 上的 PHP 连接到 Amazon MySQL RDS 实例【英文标题】:How to connect to an Amazon MySQL RDS instance via PHP over SSL 【发布时间】:2011-06-09 09:37:03 【问题描述】:

我有一个运行 WordPress 站点的 EC2 实例。 WordPress 数据库位于 RDS 实例上。我想通过 SSL 连接到数据库。

据我了解,WordPress 开箱即用的 mysql 扩展不支持 SSL。所以,我安装了一个使用 MySQLi 的 WordPress 数据库脚本,它支持 SSL。

我遇到的问题是亚马逊只提供一个密钥文件(more info),而我能找到的使用 MySQLi over SSL 的所有示例都至少包括 3 个文件:

$db = mysqli_init();
$db->ssl_set('server-key.pem','server-cert.pem','cacert.pem',NULL,NULL); 

我可以从 mysql 命令行应用程序通过 SSL 连接到我的数据库。鉴于我只有 1 个文件,谁能告诉我我需要做什么才能使 php 的 MySQLi 扩展工作?

【问题讨论】:

如果你跳过这些参数会发生什么? 请注意,亚马逊文档指出,同一区域内的流量永远不会离开亚马逊的网络。因此,这包括一个特定区域内所有可用区之间的流量。 另外,“使用 MySQLi 的 WordPress 数据库脚本”的名称/链接是什么?谢谢! 已经有一段时间了,但我相信我按照这些说明修改了 wp-db.php:wordpress.org/support/topic/mysqli 【参考方案1】:

事实证明,这并没有我想象的那么复杂。调高错误报告级别会发现我的代码中有一个我没有发现的错误。以这种方式使用 ssl_set 有效:

$db = mysqli_init();
$db->ssl_set(NULL,NULL,'/path/to/mysql-ssl-ca-cert.pem',NULL,NULL);
$db->real_connect($dbhost,$dbuser,$dbpassword,$dbname);

【讨论】:

【参考方案2】:

试试这个:

$db = mysqli_init();
$db->ssl_set(null, 'https://rds.amazonaws.com/doc/mysql-ssl-ca-cert.pem', null, null, null);

【讨论】:

以上是关于如何通过 SSL 上的 PHP 连接到 Amazon MySQL RDS 实例的主要内容,如果未能解决你的问题,请参考以下文章

如何创建允许 PHP 通过 SSL 连接到 MySQL 的证书?

如何通过 SSL 连接到 Amazon RDS?

使用 PHP 通过 IMAP 连接到 Gmail - SSL 上下文失败

C#:如何在启用 SSL 的情况下连接到 Active Directory?

使用带有 --ssl 的 PHP PDO 连接到 MySQL/MariaDB,无需证书

PHP PDO 使用 SSL 连接到 MS SQLServer Express