5

AWS S3 バケットにアクセスするために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

意味がわかりません。それはどういう意味ですか、どうすれば解決できますか?

編集:これを回答済みとしてマークしましたが、間違っていました。Amazon SDK を使用しているか、php5-curl ライブラリを使用しているかに関係なく、根本的な問題と思われるものにリンクしました。バケット名にピリオド (別名ピリオド) が含まれる SSL 証明書に関連する S3 バケットにプログラムでアクセスしようとする一部の地域の EC2 ユーザーに影響を与える一般的な問題があるようです。文書化されていますが、ここでは解決されていません。

4

3 に答える 3

4

AWS SDK for PHP 1.5.5 を使用してみて、リージョンを指定し、 path_styletrue に設定していることを確認してください。私はシンガポールにいるので、コードは次のようになります。

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

これは私にはうまくいくようです。

それが役に立てば幸い!

乾杯、アーディ

于 2013-03-26T15:50:48.353 に答える
2

s3-php5-curl/S3.php行 1298 ~ 1299 を編集して次のように変更することで、有効な SSL 証明書をチェックしないように CURL にいつでも指示できます。

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

これは、上記のコメントの datasage で指摘されているように、xzs3.amazonaws.com タイプのバケットに必要です。*.s3.amazonaws.com のワイルドカード SSL 証明書はそれらをカバーしません。

于 2013-03-25T21:09:32.127 に答える
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 に答える