5

我正在使用s3-php5-curl访问我的 AWS S3 存储桶。

当我自己托管 PHP 应用程序时,该getBucket()函数工作正常并检索结果,但是当我将完全相同的代码放入 AWS EC2 实例(默认 AIM - Linux、Apache、PHP)时,我收到以下错误:

Warning: S3::getBucket(): [51] Unable to communicate securely with peer: requested domain name does not match the server's certificate. In /var/www/html/s3-php5-curl/S3.php on line 136 Warning: Invalid argument supplied for foreach() in /var/www/html/index.php on line 15

我无法理解它。这是什么意思,我该如何解决?

编辑:我确实将此标记为已回答,但我错了。无论您是使用 Amazon SDK 还是 php5-curl 库,我都已链接到潜在问题似乎是什么。似乎存在一个普遍问题影响某些地区的 EC2 用户,他们尝试以编程方式访问与 SSL 认证相关的 S3 存储桶,其中存储桶名称包含句号(也称为句点)。它已被记录在案,但在这里没有解决。

4

3 回答 3

4

尝试使用适用于 PHP 1.5.5 的 AWS 开发工具包并确保指定您的区域并设置path_style为 true。对我来说,我在新加坡,所以我的代码是:

 $s3 = new AmazonS3();
 $s3->set_region(AmazonS3::REGION_APAC_SE1);
 $s3->path_style = true;

这似乎对我有用。

希望能帮助到你!

干杯,阿迪

于 2013-03-26T15:50:48.353 回答
2

Unable to communicate securely with peer: requested domain name does not match the server's certificate.

当 CURL 尝试验证证书时会发生此错误。虽然您可以使用 curl 选项禁用此设置,但存在证书名称不匹配的原因。

看起来您拥有的库有些过时了,您可能需要考虑使用它:http ://aws.amazon.com/sdkforphp/

于 2013-03-18T21:13:42.530 回答
2

s3-php5-curl/S3.php您始终可以通过将第 1298-1299 行更改为:来指示 CURL 不检查有效的 SSL 证书:

curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);

这对于 xzs3.amazonaws.com 类型的存储桶来说是必要的,正如上面评论中的 datasage 所指出的,*.s3.amazonaws.com 的通配符 SSL 证书不包括这些。

于 2013-03-25T21:09:32.127 回答