我正在使用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。
答案 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证书不包括这些。