Błąd CloudFront podczas obsługi przez HTTPS przy użyciu SNI

[2]}Amazon niedawno wdrożył nową funkcję na CloudFront, która obsługuje niestandardowe certyfikaty SSL bez opłat za pomocą SNI (wskazanie nazwy serwera).

Moja dystrybucja została skonfigurowana z bezpłatnym certyfikatem klasy 1 od StartSSL i wszystko działało, gdy zauważyłem, że strona przestanie działać krótko po jej wdrożeniu. Uruchamianie SSL Checker zwraca, że mój certyfikat działa poprawnie:

Sprawdzanie SSL

Ale wtedy trafiłbym na tę stronę błędu, gdy próba uzyskania dostępu do witryny przez HTTPS(działałoby to w przypadku pierwszego żądania, a następnie w kolejnych próbach połączenia).

Błąd CF

Oto szczegółowe dane wyjściowe podczas uzyskiwania dostępu z ssl (następuje po indeksie):

$ curl -I -v -ssl https://wikichen.is
* Adding handle: conn: 0x7f9f82804000
* Adding handle: send: 0
* Adding handle: recv: 0
* Curl_addHandleToPipeline: length: 1
* - Conn 0 (0x7f9f82804000) send_pipe: 1, recv_pipe: 0
* About to connect() to wikichen.is port 443 (#0)
*   Trying 54.230.141.222...
* Connected to wikichen.is (54.230.141.222) port 443 (#0)
* TLS 1.2 connection using TLS_RSA_WITH_RC4_128_MD5
* Server certificate: www.wikichen.is (6w984WNu7vM5OrdU)
* Server certificate: StartCom Class 1 Primary Intermediate Server CA
* Server certificate: StartCom Certification Authority
> HEAD / HTTP/1.1
> User-Agent: curl/7.30.0
> Host: wikichen.is
> Accept: */*
>
< HTTP/1.1 200 OK
HTTP/1.1 200 OK
< Content-Type: text/html; charset=utf-8
Content-Type: text/html; charset=utf-8
< Content-Length: 1153
Content-Length: 1153
< Connection: keep-alive
Connection: keep-alive
< Date: Sun, 09 Mar 2014 16:09:54 GMT
Date: Sun, 09 Mar 2014 16:09:54 GMT
< Cache-Control: max-age=120
Cache-Control: max-age=120
< Content-Encoding: gzip
Content-Encoding: gzip
< Last-Modified: Wed, 05 Mar 2014 20:40:48 GMT
Last-Modified: Wed, 05 Mar 2014 20:40:48 GMT
< ETag: "34685bc45353d1030d3a515ddba78f3e"
ETag: "34685bc45353d1030d3a515ddba78f3e"
* Server AmazonS3 is not blacklisted
< Server: AmazonS3
Server: AmazonS3
< Age: 4244
Age: 4244
< X-Cache: Hit from cloudfront
X-Cache: Hit from cloudfront
< Via: 1.1 4f672256eaca5524999342dc8678cdd2.cloudfront.net (CloudFront)
Via: 1.1 4f672256eaca5524999342dc8678cdd2.cloudfront.net (CloudFront)
< X-Amz-Cf-Id: h4TEULH44TCi7m2lL42A8lO-5-Gmx8iY2M2C1AOmRlK543zFN6jCtQ==
X-Amz-Cf-Id: h4TEULH44TCi7m2lL42A8lO-5-Gmx8iY2M2C1AOmRlK543zFN6jCtQ==

<
* Connection #0 to host wikichen.is left intact

Potem nie działa na innych stronach:

$ curl -i -v https://wikichen.is/writing/index.html
* Adding handle: conn: 0x7fa153804000
* Adding handle: send: 0
* Adding handle: recv: 0
* Curl_addHandleToPipeline: length: 1
* - Conn 0 (0x7fa153804000) send_pipe: 1, recv_pipe: 0
* About to connect() to wikichen.is port 443 (#0)
*   Trying 54.230.140.160...
* Connected to wikichen.is (54.230.140.160) port 443 (#0)
* TLS 1.2 connection using TLS_RSA_WITH_RC4_128_MD5
* Server certificate: www.wikichen.is (6w984WNu7vM5OrdU)
* Server certificate: StartCom Class 1 Primary Intermediate Server CA
* Server certificate: StartCom Certification Authority
> GET /writing/index.html HTTP/1.1
> User-Agent: curl/7.30.0
> Host: wikichen.is
> Accept: */*
>
< HTTP/1.1 502 Bad Gateway
HTTP/1.1 502 Bad Gateway
< Content-Type: text/html
Content-Type: text/html
< Content-Length: 472
Content-Length: 472
< Connection: keep-alive
Connection: keep-alive
* Server CloudFront is not blacklisted
< Server: CloudFront
Server: CloudFront
< Date: Sun, 09 Mar 2014 17:54:41 GMT
Date: Sun, 09 Mar 2014 17:54:41 GMT
< Age: 6
Age: 6
< X-Cache: Error from cloudfront
X-Cache: Error from cloudfront
< Via: 1.1 9096435f28f91f92bacdf76122de09ee.cloudfront.net (CloudFront)
Via: 1.1 9096435f28f91f92bacdf76122de09ee.cloudfront.net (CloudFront)
< X-Amz-Cf-Id: iAUOQbP8O4A0pI9KGvVz0VgBT1TW-j0yVDa7vdSvIAuxnKOyQghtnw==
X-Amz-Cf-Id: iAUOQbP8O4A0pI9KGvVz0VgBT1TW-j0yVDa7vdSvIAuxnKOyQghtnw==

<
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<HTML><HEAD><META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
<TITLE>ERROR: The request could not be satisfied</TITLE>
</HEAD><BODY>
<H1>ERROR</H1>
<H2>The request could not be satisfied.</H2>
<HR noshade size="1px">
</BODY></HTML>

<BR clear="all">
<HR noshade size="1px">
<ADDRESS>
Generated by cloudfront (CloudFront)
</ADDRESS>
* Connection #0 to host wikichen.is left intact
</BODY></HTML>%

Chciałbym kilka wskazówek, od czego zacząć rozwiązywanie problemów.

Author: wikichen, 2014-03-09

2 answers

Miły przedstawiciel o imieniu Alastair @ AWS z forum AWS CloudFront rozwiązał to dla mnie:

Zidentyfikowałem Twoją dystrybucję CloudFront i wiadro S3 działając jako źródło tej dystrybucji.

Mogę odtworzyć i wyjaśnić przerywany '502 Bad Gateway' otrzymujesz odpowiedź.

Ta odpowiedź jest zwracana przez CloudFront podczas próby uzyskania dostępu do Adres URL wykorzystujący protokół HTTPS, który nie jest obecnie buforowany przez CloudFront. Powodem tego błędu jest to, że CloudFront próbuje skontaktuj się ze swoim origin za pomocą protokołu HTTPS, a to nie powiedzie się.

Powodem tej awarii jest skonfigurowanie źródła jako Wiadro S3, ale używasz typu "Custom Origin" i kierujesz do adres URL strony S3 dla tego wiadra. Jeśli spróbujesz uderzyć w S3 adres URL strony internetowej przy użyciu HTTPS, zauważysz, że to nie działa. Strona S3 hosting obsługuje tylko serwowanie treści za pomocą protokołu HTTP (http://docs.aws.amazon.com/AmazonS3/latest/dev/WebsiteEndpoints.html#WebsiteRestEndpointDiff).

Teraz, zachowanie przerywanego ładowania strony, które widzisz, jest spowodowane CloudFront zwraca strony, które obecnie ma w pamięci podręcznej. Ty powinien być w stanie odtworzyć ten scenariusz w następujący sposób:

  1. Hit strony w witrynie za pomocą HTTPS. Powinieneś odzyskać błąd "502 Bad Gateway".
  2. naciśnij tę samą stronę używając HTTP. Powinieneś zobaczyć stronę.
  3. naciśnij ponownie stronę używając HTTPS. Powinieneś teraz uzyskać oczekiwany wynik, ponieważ CF dostarczył zawartość z pamięci podręcznej, a nie próbuję skontaktować się z Twoim źródłem.

Aby rozwiązać ten problem, spróbuj wykonać następujące czynności:

  1. otwórz Konsolę zarządzania CloudFront i otwórz swoją dystrybucję.
  2. przejdź do zakładki Origins, wybierz swoje pochodzenie i kliknij "Edytuj"
  3. zmodyfikuj "Politykę protokołu Origin" Na "tylko HTTP".
  4. Zapisz zmiany i odczekać około 15 minut, aż zmiana wejdzie w życie.
  5. Test

Spodziewam się, że zmusi to CloudFront do skontaktowania się z Twoim pochodzeniem używanie tylko HTTP. Przetestowałem to w moim środowisku z S3 Stronę hostowaną i mogę z powodzeniem ładować treści za pośrednictwem zarówno HTTP i HTTPS.

Oto link do oryginalnego wątku na forum.

 53
Author: wikichen,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-03-10 07:55:02

Miałem podobny problem z tym i, jak zasugerował @ Michael-sqlbot, przełączyłem się z custom origin NA S3. To samo nie rozwiązało problemu.

Oprócz zmiany źródła, Andrew z AWS support powiedział, że aliasy działają lepiej niż CNAMEs. Używałem CNAMEs. Po przełączeniu na aliasy (jeden dla IPv4 i jeden dla IPv6) zadziałało. Oto dokumentacja Route 53 Dla CloudFront , która pokazuje, jak skonfigurować aliasy dla CloudFront.

 0
Author: Forest J. Handford,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-12-22 18:59:01