AWS EC2实例上的S3-php5-curl - 请求的域名与服务器的证书不匹配

时间:2013-03-18 21:06:18

标签: php linux apache amazon-s3 amazon-ec2

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

getBucket()函数工作正常并在我自己托管PHP应用程序时检索结果但是当我将完全相同的代码放入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

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

编辑:我确实将此标记为已回答,但我错了。无论您使用的是亚马逊SDK还是php5-curl库,我都链接到了潜在的问题。在一些尝试以编程方式访问S3的地区,似乎存在影响EC2用户的一般问题与SSL认证相关的存储桶,其中存储桶名称包括一个句点(也称为句点)。它已被记录但未解决here

3 个答案:

答案 0 :(得分:4)

尝试使用AWS SDK for PHP 1.5.5并确保指定您的区域并将path_style设置为true。对我来说,我在新加坡所以我的代码将是:

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

这似乎对我有用。

希望它有所帮助!

干杯, 阿迪

答案 1 :(得分:2)

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

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

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

答案 2 :(得分:2)

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

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

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