2017-02-20 3 views
1

Kurzversion: Ich erhalte HTTPS-Fehler auf einer statischen Website auf AWS S3-Bucket für Webhosting eingerichtet, aber nicht https. Es befindet sich in einem CNAME-Datensatz, der auf den S3-Bucket in meiner gehosteten AWS Route 53-Zone verweist, wo der A-Eintrag an eine andere Site geleitet wird, die https verwendet.https-Fehler auf der statischen Website von AWS S3 auf Subdomain

Lange Version:

Ich habe eine Seite Rails an meinem Spitze url gehostet (idoimaging.com) auf einer AWS EC2-Instanz. Ich möchte unabhängig davon einen Blog als statische Seite (Jekyll) als Subdomain hosten blog.idoimaging.com.

Um mit einem einfachen Setup zu testen, habe ich versucht, eine minimale statische Subdomänen-Site hello.idoimaging.com. Ich habe einen Test-Bucket mit dem Namen erstellt und darin kleine index.html und error.html Dateien abgelegt. Ich fähige Website in den Eimer Eigenschaften Hosting und hat eine Lese alle Politik, um den Eimer:

{ 
    "Version": "2012-10-17", 
    "Statement": [ 
     { 
      "Sid": "Allow Public Access to All Objects", 
      "Effect": "Allow", 
      "Principal": "*", 
      "Action": "s3:GetObject", 
      "Resource": "arn:aws:s3:::hello.idoimaging.com/*" 
     } 
    ] 
} 

ich den Eimer direkt an seinem Endpunkt besuchen hello.idoimaging.com.s3-website-us-east-1.amazonaws.com und ich sehe die Seite index.html. Alles gut bis jetzt.

Jetzt möchte ich einen CNAME festlegen, damit ich die statische Website unter besuchen kann. In AWS Route 53 habe ich eine gehostete Zone für meine Domain idoimaging.com, und in dieser Domain habe ich einen CNAME mit dem Namen 'hello.idoimaging.com' und dem Wert 'hello.idoimaging.com.s3-website-us-east-1.amazonaws.com' erstellt. Ich habe gerade einen Timeout

$ dig hello.idoimaging.com 
... 
;; QUESTION SECTION: 
;hello.idoimaging.com.  IN A 
... 
;; ANSWER SECTION: 
hello.idoimaging.com. 226 IN CNAME hello.idoimaging.com.s3-website-us-east-1.amazonaws.com. 
hello.idoimaging.com.s3-website-us-east-1.amazonaws.com. 60 IN CNAME s3-website-us-east-1.amazonaws.com. 
s3-website-us-east-1.amazonaws.com. 3 IN A 52.216.64.90 
... 
;; AUTHORITY SECTION: 
s3-website-us-east-1.amazonaws.com. 1778 IN NS ns-1133.awsdns-13.org. 
s3-website-us-east-1.amazonaws.com. 1778 IN NS ns-1919.awsdns-47.co.uk. 
s3-website-us-east-1.amazonaws.com. 1778 IN NS ns-490.awsdns-61.com. 
s3-website-us-east-1.amazonaws.com. 1778 IN NS ns-661.awsdns-18.net. 

Anfangs, wenn ich hello.idoimaging.com zu besuchen versucht:

dig Ergebnisse aussehen OK. Ich habe irgendwo einen Post gelesen, als ich mit der rechten Maustaste auf die Objekte im Bucket klicke. Das schien mir nicht richtig zu sein, da ich dachte, das ist was Bucket Policies sind, aber als ich es versuchte, bekam ich eine Änderung. Unter Berechtigungen habe ich jetzt Grantee: Jeder und Erlaubnis, Öffnen/Download, und obwohl es immer noch nicht funktioniert, jetzt bekomme ich einen HTTPS-Sicherheitsfehler anstelle der Zeitüberschreitung. Es schien also, dass "Make Public" (was ich vorher noch nie gebraucht hatte) einen Unterschied machte. Fortschritt, schätze ich?

Mit curl kann ich hello.idoimaging.com abrufen und es ruft die Datei index.html, keine Sorgen, auch wenn ich --proto https verwenden. wget und jeder Browser wird jedoch nicht.

Alle Anfragen an hello.idoimaging.com sind jetzt gezwungen, https: //, die mit "Ihre Verbindung ist nicht privat"/"Diese Website verwendet HTTP Strict Transport Sicherheit (HSTS)" und verschiedene verschiedene Meldungen in verschiedenen Browsern ist fehlgeschlagen. Ist dieses Force-to-https-Verhalten normal? Der Grund, warum ich frage, ist, dass meine Apex-Site im nginx-Server http-Anfragen an https weiterleitet. Aber wenn ich hello.idoimaging.com anfrage, wird das DNS den CNAME für meine S3-Seite abholen, nicht den A-Eintrag für meine Apex-Site, oder? Scheint, dass sie nicht verwandt sein können. Die Apex-Site ist mit lokalen Zertifikaten von Letsencrypt.org gesichert.

Sobald ich das fertig habe, möchte ich CloudFront verwenden, aber ich habe gerade genug Schwierigkeiten mit der S3-Seite für jetzt.

Es scheint, das Problem ergibt sich aus Anfragen an (wie getippt) gezwungen zu https, und das ist fehlgeschlagen. Ich suche Rat. Wenn es ein Problem mit meiner Apex-Site gibt, die https ist und die Subdomain nicht https ist, werde ich es anscheinend komplizieren, indem ich versuche, https für die Subdomain einzurichten, weil es verschiedene Zertifikate von der Apex-Site verwenden würde.

All das Zeug ist jetzt und lebe jetzt.

+1

Ich bin geneigt zu glauben, dass dies ein Duplikat von [Amazon AWS 307 Antwort und permanente Umleitung zu HTTPS] sein wird (http://stackoverflow.com/) a/28595295/1695906) - Sie haben HSTS auf Ihrer Basisdomäne konfiguriert und es scheint, als ob * der Browser * sie auf Subdomains erweitert. Der Dienst tut dies nicht. Es kann nicht sein, becauae Website Hosting-Buckets können nicht HTTPS ohne Hilfe von CloudFront tun. –

+0

Das sieht sehr vielversprechend aus! Auf meinem nginx-Server ist der Strict-Transport-Security-Header nicht konfiguriert, aber er würde sicherlich das Verhalten erklären. Auch warum curl kann die index.html Seite holen, aber ein Browser kann nicht. Ich lese gerade auf HSTS. Es scheint, es wäre eine gute Sache zu haben? Wenn ich meinen S3-Bucket hinter CloudFront, das TLS unterstützt, stellen kann, sollte ich damit weitermachen? Ich dachte, es wäre einfacher mit http zu beginnen, vielleicht verursacht es das Problem. –

+1

Sie hatten im Prinzip recht, zuerst die einfachere Konfiguration zu versuchen, aber in diesem Fall ist es wahrscheinlich komplizierter. Ich vermute, dass Sie HSTS irgendwann konfiguriert haben müssen, damit dies geschieht. Browser erinnern sich an diese Flagge, sobald sie sie sehen. Beachten Sie auch, dass bei CloudFront [wählen Sie nicht den Bucket-Namen aus der Dropdown-Liste aus] (http://stackoverflow.com/a/34065543/1695906), wenn der Bucket für das Hosting von Websites konfiguriert ist. Geben Sie den Hostnamen des Websiteendpunkts (Ihr aktuelles CNAME-Ziel) in das Feld für den Hostnamen des Ursprungs ein. –

Antwort

1
  • Haben Sie index.html als Indexdokument angegeben?
  • Auch die empfohlene Methode zum Festlegen benutzerdefinierter DNS für den Bucket ist die Verwendung des Typs A Datensatz mit Alias ​​ Typ. In dem Alias-Zielsatz s3-website-us-east-1.amazonaws.com.

P.S. In Bezug auf SSL bietet s3 keine SSL für Websites mit benutzerdefiniertem DNS. Die einzige Option wäre, CloudFront im Vordergrund hinzuzufügen.

P.S. Löschen Sie den Cache Ihres Browsers oder versuchen Sie es im Inkognito-Modus: enter image description here

+0

Prost dafür.Ich habe index.html angegeben. Wie Sie vorgeschlagen haben, habe ich von einem CNAME zu einem A-Alias ​​mit dem s3-Endpunkt gewechselt (erscheint als Vorschlag), aber jetzt kommt es zu einem Timeout. Ich merke, wenn ich wtoget.idoimaging.com wette, es heißt "URL transformiert zu HTTPS aufgrund einer HSTS-Richtlinie", könnte dies mit dem https-Problem zusammenhängen? Wenn ich mich direkt mit dem S3-Bucket-Endpunkt verbinde, bleibt es in http. –

+0

es funktioniert für mich: http://hello.idoimaging.com/ –

+0

Ich sehe für Sie blieb es http und arbeitete. Für mich, nachdem ich von CNAME zu A-Alias ​​gewechselt habe, zwingt es immer noch zu https, und immer noch mal aus. Ich versuche es vom Inkognito/Cleared Cache. –

Verwandte Themen