Wie leite ich HTTP auf HTTPS in AWS Application Load Balancer um?

12

Unsere Website benötigt HIPAA-Konformität, daher muss alles verschlüsselt werden. Ich möchte nicht, dass der Client eine Fehlermeldung erhält, wenn er " http : //mysite.com" eingibt. Daher muss ich sowohl HTTP als auch HTTPS unterstützen und HTTP zu HTTPS umleiten. Habe ich recht?

Ich habe es auf den Webservern richtig gemacht. Wenn ich also eine direkte Verbindung zu den Webservern herstelle, wird HTTP automatisch zu HTTPS umgeleitet. Alles gut.

Die Webserver befinden sich jedoch hinter einem AWS Application Load Balancer. Ich weiß nicht, wie ich HTTP auf der ELB zu HTTPS umleiten soll. So können Client-Browser weiterhin über HTTP eine Verbindung zur ELB herstellen.

Wie richte ich HTTP => HTTPS auf einem AWS Application Load Balancer ein?

Mit anderen Worten, ich bin sicher, dass die Verbindung zwischen der ELB und den Webservern HTTPS ist, aber wie kann sichergestellt werden, dass die Verbindung zwischen den Client-Browsern und der ELB HTTPS ist?

Dummer Kerl
quelle
Du machst es nicht auf der LB. Sie tun dies auf den Instanzen, basierend auf dem X-Forwarded-ProtoHeader, den die LB sendet.
Ceejayoz
Ich bin keine Server-Person - ich bin ein C # -Programmierer. Entschuldigen Sie bitte, dass ich dumm bin. Ich habe das URL-Umschreibemodul verwendet, um die Umleitung auf dem Windows-Server einzurichten. Es funktioniert, wenn ich mich direkt mit dem Server verbinde. Wenn ich mich jedoch mit der ELB verbinde, kann ich trotzdem eine Verbindung mit HTTP herstellen. Warum?
Dumme Kerl
Hört der ALB 443 mit einem SSL-Zertifikat ab? Um sicher zu sein, möchten Sie in Ihrer Frage auch SSL zwischen dem ALB und den Servern?
strongjz

Antworten:

-4

Sie können die unten aufgeführte Konfiguration zu Ihrer .htaccess-Datei hinzufügen. Stellen Sie jedoch vorher sicher, dass mod_rewrite auf dem Server aktiviert ist und die .htaccess-Datei nicht verweigert wird.

RewriteEngine On
RewriteCond %{HTTP:X-Forwarded-Proto} =http
RewriteRule . https://%{HTTP:Host}%{REQUEST_URI} [L,R=permanent]

Für eine detaillierte Erklärung gehen Sie bitte die offizielle Dokumentation von aws end durch. https://aws.amazon.com/premiumsupport/knowledge-center/redirect-http-https-elb/

imvikasmunjal
quelle
7
Diese Antwort scheint den Apache HTTP Server
Paul Draper
2
OP fragt, wie die ELB konfiguriert werden soll, damit Sie erklären, wie Apache konfiguriert wird. Sie haben ausdrücklich gesagt, dass sie Apache bereits für die Umleitung konfiguriert haben. Bitte löschen Sie Ihre Antwort.
Cerin
1

Normalerweise wird die ELB so eingestellt, dass sie https (Port 443) empfängt und an die EC2-Instanz (Load Balancer-Ziel) auf http (Port 80) weiterleitet.

Der Backend-Webserver leitet diese Anforderungen an Port 443 des Load Balancers um, was zu einer Endlosumleitungsschleife führt (zwischen dem Load Balancer und dem Backend-Webserver).

Eine häufige Fehlermeldung ist ERR_TOO_MANY_REDIRECTS.

Die Lösung besteht darin, sich den X-Forwarded-Proto anzusehen, bei dem es sich um das Protokoll handelt, das der Load Balancer bei der Entscheidung für die Umleitung sieht.

Für nginx sieht die Konfiguration folgendermaßen aus:

server {
    listen   80;
    server_name    www.example.org;   
    if ($http_x_forwarded_proto = 'http') {
         return 301 https://$server_name$request_uri;   
    }
}

und für Apache .htaccess so etwas wie:

RewriteEngine On
RewriteCond %{HTTP:X-Forwarded-Proto} =http
RewriteRule .* https://%{HTTP:Host}%{REQUEST_URI} [L,R=permanent]

HINWEIS: Obwohl man denken könnte, dass es praktisch wäre, wenn dies ohne eine Neukonfiguration des Webservers durchgeführt werden könnte, gibt es ab Frühjahr 2018 keine Möglichkeit, dies nur mit ELB zu lösen, dh Sie müssen Ihren Webserver so konfigurieren, dass dies funktioniert.

Sandstrom
quelle