HTTP

Umleitung von HTTP auf HTTPS

Umleitung von HTTP auf HTTPS
Unabhängig davon, ob Sie selbstsignierte Zertifikate oder Zertifikate einer bekannten Zertifizierungsstelle verwenden, benötigen Sie eine Möglichkeit, sie in Ihre Dienste zu integrieren. Einer der typischsten Anwendungsfälle eines HTTP-Servers. Dies könnte ein Webserver oder ein REST-API-Server sein, aber er muss so konfiguriert werden, dass er sicher ist.

Die meisten Webserver wie nginx und Apache hören standardmäßig auf Port 80 und benötigen einiges an Konfiguration, bevor sie mit der Verwendung der Zertifikate zum Verschlüsseln des Datenverkehrs beginnen. Trotz der Konfiguration kann der Webserver den HTTP-Verkehr weiterhin problemlos bedienen. Die Besucher Ihrer Website geben also einfach http://example . ein.com statt https://Beispiel.com und der gesamte Datenverkehr bleibt für sie unverschlüsselt. Um dieses Problem zu umgehen, müssen wir die HTTP-Server so konfigurieren, dass sie selbst das gesamte HTTP auf HTTPS umleiten.

Das Setup, das ich habe, verwendet einen FQDN mit einer öffentlichen IP, daher werde ich ein SSL-Zertifikat von LetsEncrypt ausstellen, anstatt ein selbstsigniertes auszustellen. Abhängig von der Art des verwendeten Webservers können Sie dies auf verschiedene Weise tun. Aber der allgemeine Ablauf ist so:

  1. Holen Sie sich ein signiertes Zertifikat von einer CA. In unserem Fall wird das LetsEncrypt sein
  2. Konfigurieren Sie den Webserver so, dass er den Verschlüsselungsschlüssel verwendet, um den ausgehenden HTTP-Datenverkehr auf Port 443 zu verschlüsseln. Dies ist der Standard-HTTPS-Port.
  3. Leiten Sie alle eingehenden Anfragen auf Port 80 (unverschlüsseltes HTTP) auf Port 443 um, wodurch verschlüsselte Sitzungen für alle eingehenden Verbindungen ermöglicht werden.

Lassen Sie uns verschiedene Wege aufzeigen, um das zu erreichen, was wir wollen. Die erste ist die einfachste Lösung, die Certbot verwendet.

1. Der einfachste Weg - Certbot-Plugins für Nginx oder Apache verwenden

Ich werde Nginx als Beispiel für diesen Server verwenden. Wenn Sie ein anderes Betriebssystem wie Apache oder HAProxy verwenden, besuchen Sie einfach die offizielle Seite von Certbot und wählen Sie Ihr Betriebssystem und den Webserver Ihrer Wahl aus. Für Nginx auf Ubuntu 18.04, das sind die Befehle, die du brauchst.

Aktualisieren Sie zuerst Ihren Repo-Index.

$ sudo apt-get update
$ sudo apt-get install software-properties-common

Sie müssten die erforderlichen Drittanbieter-Repositorys hinzufügen, die Ubuntu möglicherweise nicht standardmäßig aktiviert hat enabled.

$ sudo add-apt-repository-universum
$ sudo add-apt-repository ppa:certbot/certbot
$ sudo apt-get update

Und dann installieren Sie das certbot-Paket mit Nginx-Plugins mit dem folgenden Befehl command.

$ sudo apt-get install certbot python-certbot-nginx

Die Anleitung wird für verschiedene Plattformen unterschiedlich sein und Plugins für den Webserver installieren, falls verfügbar. Der Grund, warum Plugins unser Leben so viel einfacher machen, ist, dass sie die Konfigurationsdateien auf dem Webserver automatisch bearbeiten können, um auch den Datenverkehr umzuleiten. Der Nachteil könnte sein, dass das Plugin, wenn Sie einen sehr angepassten Server für eine bereits vorhandene Website betreiben, einige Dinge darin kaputt machen kann.

Für neue Websites oder sehr einfache Konfigurationen, wie einen Reverse-Proxy, funktioniert das Plugin überraschend gut. Um die Zertifikate zu erhalten und den Datenverkehr umzuleiten, führen Sie einfach den folgenden Befehl aus und folgen Sie den verschiedenen interaktiven Optionen, während das Paket Sie durch sie führt.

$ sudo certbot --nginx

Ausgabe:

certbot --nginx
Debug-Protokoll in /var/log/letsencrypt/letsencrypt speichern.Log
Ausgewählte Plugins: Authenticator nginx, Installer nginx
Geben Sie die E-Mail-Adresse ein (wird für dringende Verlängerungs- und Sicherheitshinweise verwendet) (Geben Sie 'c' t
abbrechen): IHRE [email protected]
 
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Bitte lesen Sie die Nutzungsbedingungen unter
https://letsencrypt.org/dokumente/LE-SA-v1.2-November-15-2017.pdf. Du musst
zustimmen, um sich beim ACME-Server zu registrieren unter
https://acme-v02.api.letsencrypt.org/verzeichnis
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(A)Gree/(C)Cancel: A
 

In Ihren Konfigurationsdateien wurden keine Namen gefunden. Bitte geben Sie Ihre Domain ein
Name(n) (durch Kommas und/oder Leerzeichen getrennt) (Geben Sie 'c' ein, um abzubrechen): SUBDOMAIN.DOMAINNAME.TLD

 
Bitte wählen Sie aus, ob HTTP-Datenverkehr auf HTTPS umgeleitet und der HTTP-Zugriff entfernt werden soll.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1: Keine Weiterleitung - Nehmen Sie keine weiteren Änderungen an der Webserver-Konfiguration vor.
2: Umleitung – Alle Anfragen an einen sicheren HTTPS-Zugriff umleiten. Wählen Sie dies für
neue Websites oder wenn Sie sicher sind, dass Ihre Website auf HTTPS funktioniert. Das kannst du rückgängig machen
ändern, indem Sie die Konfiguration Ihres Webservers bearbeiten.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Wählen Sie die entsprechende Nummer [1-2] und dann [enter] (drücken Sie 'c' zum Abbrechen): 2
Umleitung des gesamten Datenverkehrs auf Port 80 zu SSL in /etc/nginx/sites-enabled/default
 
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Herzliche Glückwünsche! Sie haben https://SUBDOMAIN erfolgreich aktiviert enabled.DOMAINNAME.TLD
 
Sie sollten Ihre Konfiguration testen unter:
https://www.ssllabs.com/ssltest/analyze.html?d=SUBDOMAIN.DOMAINNAME.TLD
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

WICHTIGE NOTIZEN:
- Herzliche Glückwünsche! Ihr Zertifikat und Ihre Kette wurden gespeichert unter:

/etc/letsencrypt/live/SUBDOMAIN.DOMAINNAME.TLD/Fullchain.pem

Ihre Schlüsseldatei wurde gespeichert unter:

/etc/letsencrypt/live/SUBDOMAIN.DOMAINNAME.TLD/Privatschlüssel.pem

Wie im obigen Beispiel gezeigt, müssen Sie nur eine gültige E-Mail-Adresse und Ihren Domainnamen angeben, um das Zertifikat zu erhalten. Dieses Zertifikat ist zerlegt in /etc/letsencrypt/live/SUBDOMAIN.DOMAINNAME.TLD. Das letzte Verzeichnis wird nach Ihrem FQDN benannt.

Der wichtigste Aspekt ist die Auswahl der Umleitungsoption, die den gesamten HTTP-Verkehr auf HTTPS umleitet. Wenn Sie neugierig sind, was diese Änderungen sind, können Sie die Konfigurationsdateien in überprüfen /etc/nginx/ um es auf den Punkt zu bringen.

2. Bearbeiten der Config-Dateien

Wenn Sie Ihren Server manuell für die Verwendung der Zertifikate konfigurieren möchten. Um die Zertifikate mit certbot abzurufen, führen Sie Folgendes aus:

$ sudo certbot certonly

Die Zertifikate werden wie bisher im Verzeichnis gespeichert /etc/letsencrypt/live/IhrDomainname.com/

Jetzt können wir Nginx so konfigurieren, dass die Dateien in diesem Verzeichnis verwendet werden. Das Wichtigste zuerst, ich werde das Debian-spezifische Verzeichnislayout loswerden. Die Site-Konfigurationsdatei der Standardseite ist /etc/nginx/sites-available/default Unterverzeichnis mit einem Symlink zu /etc/nginx/site-enabled.

Ich lösche einfach den Symlink und verschiebe die Konfigurationsdatei nach /etc/nginx/conf.d mit a .conf-Erweiterung, nur um die Dinge verallgemeinert und auch auf andere Distributionen anwendbar zu halten.

$ sudo rm /etc/sites-enabled/default
$ sudo mv /etc/nginx/sites-available/default /etc/nginx/conf.d/Standard.conf
$ sudo service nginx neu starten

Ich werde diese Standardkonfigurationsdatei ändern, um zu zeigen, wie TLS aktiviert ist.

Im Folgenden finden Sie den Inhalt Ihrer Standardkonfigurationsdatei ohne die auskommentierten Abschnitte. Die hervorgehobenen Abschnitte sind diejenigen, die Sie zu Ihrer Serverkonfiguration hinzufügen sollten, um TLS zu aktivieren, und der letzte Block in dieser Konfigurationsdatei erkennt, ob das Schema TLS verwendet oder nicht. Wenn TLS nicht verwendet wird, gibt es einfach einen 301-Umleitungscode an den Client zurück und ändert die URL, um stattdessen https zu verwenden. Auf diese Weise verpassen Sie keine Benutzer

Server
lauschen 80 default_server;
lauschen [::]:80 default_server;
hören 443 ssl;
ssl_certificate  /etc/letsencrypt/live/SUBDOMAIN.DOMAIN.TLS/Vollkette.pem;
ssl_certificate_key /etc/letsencrypt/live/SUBDOMAIN.DOMAIN.TLD/Privatschlüssel.pem;
ssl_session_cache shared:le_nginx_SSL:1m;
ssl_session_timeout 1440m; SSL-Protokolle TLSv1 TLSv1.1  TLSv1.2;
ssl_prefer_server_chiffren an;
ssl_chiffren "ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-
ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256
-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256
-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128
-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE
-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE
-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3
-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256
-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS";
root /var/www/html;
Indexindex.HTML-Index.htm-index.nginx-debian.html;
Servername _;
Lage /
try_files $uri $uri/ =404;

if ($schema != "https")
301 https://$host$request_uri zurückgeben;

 

Dieser Konfigurationsdatei wurden einige zusätzliche Parameter hinzugefügt. Einschließlich Parameter, die das Timeout angeben, die TLS-Version, die Sie verwenden sollten und welche Verschlüsselungscodes der Server verwenden wird. Dies wurde von Certbots empfohlenen (aber optionalen) Konfigurationen für Nginx ausgeliehen.

Überprüfen Sie nun, ob die Konfigurationsdatei gültig ist und starten Sie den Server neu.

$ sudo nginx -t
nginx: die Konfigurationsdatei /etc/nginx/nginx.conf-Syntax ist in Ordnung
nginx: Konfigurationsdatei /etc/nginx/nginx.conf-Test ist erfolgreich
$ sudo service nginx neu starten

Fazit

Sie können den gleichen Ansatz für kompliziertere Web-Apps und -Dienste anwenden, die HTTPS benötigen. Mit Letsencrypt können Sie Zertifikate für mehrere Domainnamen gleichzeitig ausstellen und ganz einfach mehrere Websites hinter Ihrem nginx-Webserver hosten server. Wenn Sie dem obigen Beispiel gefolgt sind, versuchen Sie, Ihre Website über http (http://SUBDOMAIN.DOMAIN.TLD) und Sie werden automatisch zu HTTPS weitergeleitet.

Verwenden Sie für andere Webserver wie Apache das entsprechende certbot-Plugin oder beziehen Sie sich auf deren offizielle Dokumentation.

So ändern Sie die Maus- und Touchpad-Einstellungen mit Xinput in Linux
Die meisten Linux-Distributionen werden standardmäßig mit der Bibliothek „libinput“ ausgeliefert, um Eingabeereignisse auf einem System zu verarbeiten...
Weisen Sie Ihre Maustasten mit der X-Mouse Button Control für verschiedene Software unterschiedlich zu
Vielleicht benötigen Sie ein Tool, mit dem sich die Steuerung Ihrer Maus bei jeder von Ihnen verwendeten Anwendung ändern kann. In diesem Fall können ...
Microsoft Sculpt Touch Wireless-Maus Bewertung
Ich habe vor kurzem gelesen, dass Microsoft Sculpt Touch kabellose Maus und beschloss, sie zu kaufen. Nachdem ich es eine Weile benutzt hatte, beschlo...