2013-03-18 2 views
5

Używam s3-php5-curl, aby uzyskać dostęp do mojego kubełka AWS S3.S3-php5-curl na instancji AWS EC2 - żądana nazwa domeny nie pasuje do certyfikatu serwera

Funkcja działa dobrze i pobiera wynik, gdy sama hostuję aplikację PHP, ale kiedy umieszczę ten sam kod w instancji AWS EC2 (domyślny AIM - Linux, Apache, PHP), pojawia się następujący błąd:

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

nie mogę zrozumieć tego. Co to znaczy i jak mogę to rozwiązać?

EDYCJA: Zrobiłem to jako odpowiedź, ale myliłem się. Połączyłem się z tym, co wydaje się być podstawowym problemem, niezależnie od tego, czy używasz pakietu Amazon SDK, czy biblioteki php5-curl. Wygląda na to, że ogólny problem dotyczy użytkowników EC2 w niektórych regionach, którzy próbują uzyskać dostęp do swoich zasobników S3 związanych z certyfikatem SSL, gdzie nazwa zasobnika obejmuje kropkę (okres). Zostało to udokumentowane, ale nierozwiązane here.

Odpowiedz

4

Spróbuj użyć AWS SDK dla PHP 1.5.5 i upewnij się, że podałeś swój region i ustaw path_style na true. Dla mnie jestem w Singapurze, więc mój kod będzie:

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

To wydaje się działać dla mnie.

Mam nadzieję, że pomoże!

Cheers, Ardy

+0

Idealny! To teraz działa! Wydaje się, że jest to rzecz regionu. Aby potwierdzić, po ustawieniu regionu na EU_WEST mogę teraz uzyskać dostęp do mojego zasobnika z EC2 za pomocą SSL z włączonym verifyhostem. Dziękuję bardzo, że posortowałeś mój problem dla mnie. – chrislewisdev

+0

Nie ma za co! Cieszę się, że pomogło! –

+0

To nie działało dla mnie, dopóki nie dodałem '$ 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.

Ten błąd występuje, gdy CURL próbuje zweryfikować certyfikat. Chociaż można wyłączyć to ustawienie z opcjami zwijania, dlaczego istnieje niezgodność nazwy certyfikatu.

Wygląda bibliotece masz jest nieco przestarzały, może warto rozważyć przy użyciu to: http://aws.amazon.com/sdkforphp/

+0

Zabawne I właśnie to ustawienie, gdy ujrzałem swoją odpowiedź. Aby potwierdzić - tak to działa doskonale z sdk dla php. Dziękuję Ci. – chrislewisdev

+0

Przepraszam, że musiałem usunąć to jako odpowiedź. To, co zadziałało, to funkcja listbuckets, ale wszystko inne, co teraz wypróbuję na SDK, zawodzi. Problem wydaje się być ten sam problem, o którym wspomniałem powyżej i jest udokumentowany, ale nie rozwiązany na forach AWS [tutaj] (https://forums.aws.amazon.com/thread.jspa?threadID=69108&start=25&tstart=0). Ustawienie stylu ścieżki na prawdę najwyraźniej nie działa we wszystkich wersjach i próbowałem tego również (w Wielkiej Brytanii) bezskutecznie. Każda pomoc doceniona. – chrislewisdev

+2

Podejrzewam, że wiem, co się dzieje. Amazon s3 ma certyfikat wieloznaczny ze ścieżką * .s3.amazonaws.com. Wiadra są dostępne za pośrednictwem name.s3.amazonaws.com. Jeśli dodasz inną kropkę do nazwy, certyfikat wieloznaczny nie będzie już weryfikowany, ponieważ będzie sprawdzany tylko na jednym poziomie. W tym przypadku jedyną opcją może być wyłączenie weryfikacji hosta. Pozwól mi spojrzeć na SDK, aby zobaczyć, jak to się robi. – datasage

2

Zawsze można polecić CURL nie do sprawdzenia ważnego certyfikatu SSL edytując s3-php5-curl/S3.php zmieniających się wiersze 1298-1299 :

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

to wszelkie niezbędne do wiadra, które są typu xzs3.amazonaws.com, jak podkreślił datasage w powyższych uwag, wieloznaczny cert SSL * .s3.amazonaws.com nie obejmuje tych, .