2013-03-18 15 views
5

私はs3-php5-curlを使用してAWS S3バケットにアクセスしています。AWS EC2インスタンスのS3-php5-curl - 要求されたドメイン名がサーバーの証明書と一致しません

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

私はそれを理解することはできません。それはどういう意味ですか、どのように解決できますか?

EDIT:私はこれを回答としてマークしましたが、間違っていました。私は、あなたがAmazon SDKを使うのかphp5-curlライブラリを使うのかにかかわらず、根底にある問題が何かに関係しているかに結びついています。バケット名にフルストップ(別名ピリオド)が含まれているSSL認証に関するS3バケットにプログラムでアクセスしようとする地域によっては、EC2ユーザーに影響する一般的な問題があるようです。これは文書化されていますが、未解決のhereがあります。

答えて

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; 

これは私のために働くようです。

希望すると助かります!

乾杯、Funnily十分に私はあなたの答えを見たとき、私はちょうどこれを設定して ARDY

+0

パーフェクト!これは今動作します!それは地域のもののようです。確認するには、EU_WESTに地域を設定して、verifyhostでSSLを使用してEC2からバケツにアクセスできるようになりました。そんなに私のために私の問題を並べ替えていただきありがとうございます。 – chrislewisdev

+0

あなたは大歓迎です!私はそれが助けてうれしい! –

+0

'$ s3-> ssl_verification = false;'(AWS v1.5.10) –

2

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

CURLは、証明書を検証しようとすると、このエラーが発生します。 curlオプションを使用してこの設定を無効にすることはできますが、証明書の名前が一致しない理由があります。

それはあなたが持っているライブラリがやや時代遅れであるように、あなたがこれを使用して検討する必要がありますになります:http://aws.amazon.com/sdkforphp/

+0

。確認する - はいそれはPHP用のSDKと完全に動作します。ありがとうございました。 – chrislewisdev

+0

申し訳ありませんが、私はこれを解答として解かなければなりませんでした。 listbuckets関数はうまくいきましたが、今SDKで試してみるものはすべて失敗します。この問題は上記の問題と同じで、AWSフォーラム(https://forums.aws.amazon.com/thread.jspa?threadID=69108&start=25&tstart=0)で文書化されていますが解決されていません。明らかにパスのスタイルをtrueに設定しても、すべてのバージョンで動作するとは限りません。どんな助けもありがたい。 – chrislewisdev

+2

私は何が起こっているのか知っていると思う。 Amazon s3には* .s3.amazonaws.comというパスのワイルドカード証明書があります。バケットは、name.s3.amazonaws.comからアクセスできます。名前に別のドットを追加すると、ワイルドカード証明書は1つのレベルでのみ検証されるため、検証されなくなります。この場合の唯一のオプションは、ホスト検証を無効にすることです。それがどのように行われているか見るためにsdkを見てみましょう。 – datasage

2

あなたは常に1298年から1299年にs3-php5-curl/S3.php変更行を編集して、有効なSSL証明書をチェックしないようにCURL指示することができます:

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

これは、上記のコメントでdatasageで指摘したように、xzs3.amazonaws.com型であるバケットのnecessayで、* .s3.amazonaws.comカバーしていないこれらのワイルドカードのSSL証明書。

関連する問題