HTTPS ist dank der Veröffentlichung von TLS 1.3 durch IETF (RFC 8446) im August 2018 gerade schneller und sicherer geworden. TLS 1.3 ist jetzt die neueste Version des TLS-Protokolls. Dieses Tutorial zeigt Ihnen, wie Sie TLS 1.3 im Nginx-Webserver unter Ubuntu 18.04 und Ubuntu 16.04 aktivieren.
Aktualisieren :Es gibt eine einfachere Möglichkeit, TLS 1.3 zu aktivieren. Siehe diesen Artikel:So aktivieren Sie ganz einfach TLS 1.3 in Nginx unter Ubuntu 18.10, 18.04, 16.04, 14.04
TLS 1.3:Verbesserte Leistung und Sicherheit
In Bezug auf die Leistung benötigt TLS 1.2 zwei Roundtrips, um eine HTTPS-Verbindung herzustellen. Mit TLS 1.3 ist nur ein Roundtrip erforderlich. TLS 1.3 unterstützt auch den Zero-Round-Trip-Modus (0-RTT-Sitzungswiederaufnahme), sodass Clients, die sich zuvor mit Ihrer Website verbunden haben, eine HTTP-Anfrage bei der ersten Nachricht an den Server senden können. Dies macht einen großen Unterschied für Benutzer in Mobilfunknetzen oder an weit entfernten Standorten.
In Bezug auf die Sicherheit hat TLS 1.3 die Unterstützung für alte Cipher Suites entfernt, die für Exploits wie den ROBOT-Angriff verantwortlich sind. Daher können Serveradministratoren in TLS 1.3 keine alten Cipher Suites mehr hinzufügen, um Benutzer alter Webbrowser zu beruhigen. Dies ist natürlich eine zu vereinfachte Erklärung. CloudFlare hat eine gute detaillierte Erklärung von TLS 1.3.
Aktivieren Sie TLS 1.3 in Nginx auf Ubuntu 18.04, Ubuntu 16.04
Es gibt zwei Anforderungen, wenn es darum geht, TLS 1.3 mit Nginx zu aktivieren.
- Ihre Nginx-Version muss TLS 1.3 unterstützen. Das bedeutet nginx 1.13 oder höher.
- Nginx muss entweder mit OpenSSL 1.1.1+ erstellt werden oder mit OpenSSL 1.1.1+ ausgeführt werden.
Die zweite Anforderung mag verwirrend klingen, also lassen Sie mich Ihnen zwei Beispiele geben.
- Ubuntu 18.04 wird mit OpenSSL 1.1.0 ausgeliefert. Das Ersetzen der OpenSSL-Systembibliothek ist keine gute Idee, aber Sie können den OpenSSL 1.1.1-Quellcode herunterladen und Nginx mit dem OpenSSL 1.1.1-Quellcode kompilieren, um TLS 1.3 zu aktivieren.
- Arch Linux wird derzeit mit OpenSSL 1.1.1 ausgeliefert, aber das Nginx-Paket im Arch-Repository wurde tatsächlich mit OpenSSL 1.1.0 erstellt. In diesem Fall wurde Nginx nicht mit OpenSSL 1.1.1 erstellt, aber es läuft mit OpenSSL 1.1.1.
Sehen wir uns nun an, wie Nginx mit OpenSSL 1.1.1 auf Ubuntu 18.04 und Ubuntu 16.04 kompiliert wird.
1. Hinzufügen des offiziellen Nginx-Repository
Anstatt den Quell-Tarball herunterzuladen und mit make
zu kompilieren , werde ich das offizielle Nginx-Repository zu meinem Ubuntu-Server hinzufügen und dann ein Deb-Paket aus dem Quellcode erstellen. Auf diese Weise muss ich nicht manuell eine lange Liste von Konfigurationsparametern zu configure
hinzufügen Befehl. Außerdem wird es innerhalb des deb-Pakets eine praktische systemd-Dienstdatei geben.
Rufen Sie zuerst den Nginx-GPG-Schlüssel ab und importieren Sie ihn in Ubuntu.
wget http://nginx.org/keys/nginx_signing.key sudo apt-key add nginx_signing.key
Erstellen Sie dann eine Quelllistendatei für das Nginx-Repo.
sudo nano /etc/apt/sources.list.d/nginx.list
Fügen Sie die folgenden zwei Zeilen in die Datei ein. Die deb-src
line ermöglicht es uns, Nginx-Quellpakete mit apt source
herunterzuladen Befehl. Bonic
ist der Codename für Ubuntu 18.04. Wenn Sie Ubuntu 16.04 verwenden, ersetzen Sie es durch xenial
. (Hinweis:Dieses Repository unterstützt kein 32-Bit-Betriebssystem.)
deb [arch=amd64] http://nginx.org/packages/mainline/ubuntu/ bionic nginx deb-src http://nginx.org/packages/mainline/ubuntu/ bionic nginx
Um eine Datei im Nano-Texteditor zu speichern, drücken Sie Ctrl+O
, und drücken Sie dann zur Bestätigung die Eingabetaste. Drücken Sie zum Beenden Ctrl+X
. Aktualisieren Sie dann den lokalen Paketindex.
sudo apt update
Jetzt wird das offizielle Nginx-Repository zum Ubuntu-Server hinzugefügt.
2. Nginx- und OpenSSL-Quellcode herunterladen
Wir werden ein nginx
erstellen Verzeichnis unter /usr/local/src/
zum Speichern der Nginx-Quellen und dann cd
in dieses Verzeichnis.
sudo mkdir /usr/local/src/nginx cd /usr/local/src/nginx/
Laden Sie das Nginx-Quellpaket mit dem folgenden Befehl herunter:
sudo apt install dpkg-dev sudo apt source nginx
Sehen Sie sich die heruntergeladenen Dateien an.
ls
Ausgabe:
nginx-1.15.3 nginx_1.15.3-1~bionic.dsc nginx_1.15.3-1~bionic.debian.tar.xz nginx_1.15.3.orig.tar.gz
Klonen Sie dann das OpenSSL-Github-Repository.
cd /usr/local/src sudo apt install git sudo git clone https://github.com/openssl/openssl.git cd openssl
Listen Sie als Nächstes alle Zweige auf und wechseln Sie zum stabilen Zweig 1.1.1.
git branch -a sudo git checkout OpenSSL_1_1_1-stable
3. Nginx-Kompilierungsregeln bearbeiten
Bearbeiten Sie die Nginx-Kompilierungsregeldatei.
sudo nano /usr/local/src/nginx/nginx-1.15.3/debian/rules
Suchen Sie config.status.nginx: config.env.nginx
Sektion. Fügen Sie den folgenden Text am Ende der CFLAGS-Zeile hinzu. Beachten Sie, dass der folgende Text keine eigene Zeile ist.
--with-openssl=/usr/local/src/openssl
Speichern und schließen Sie die Datei.
4. Nginx kompilieren
Stellen Sie sicher, dass Sie sich im Nginx-Quellverzeichnis befinden.
cd /usr/local/src/nginx/nginx-1.15.3/
Installieren Sie Abhängigkeiten, um unser Nginx-Deb-Paket zu erstellen.
sudo apt build-dep nginx
Verwenden Sie nun den folgenden Befehl, um das deb-Paket zu erstellen.
sudo dpkg-buildpackage -b
Wenn Sie den folgenden Fehler sehen,
missing initializer for field 'md_ctrl' of 'EVP_MD {aka const struct evp_md_st}
Bearbeiten Sie dann auto/cc/gcc
Datei.
sudo nano /usr/local/src/nginx/nginx-1.15.3/auto/cc/gcc
Kommentieren Sie die folgende Zeile aus. Der -Werror
Flag bewirkt, dass GCC Warnungen als Fehler behandelt.
CFLAGS="$CFLAGS -Werror"
Führen Sie dann den Build-Befehl erneut aus. Sobald der Build abgeschlossen ist, gibt es ein Nginx-Deb-Paket in /usr/local/src/nginx/
Verzeichnis. Wenn Sie Nginx bereits installiert haben, ist es an der Zeit, die alte Version zu entfernen und dann die neue Version zu installieren.
sudo apt remove nginx nginx-common nginx-full cd /usr/local/src/nginx/ sudo dpkg -i nginx_1.15.3-1~bionic_amd64.deb
Starten wir jetzt Nginx.
sudo systemctl start nginx
Wenn Sie die folgende Fehlermeldung sehen.
Failed to start nginx.service: Unit nginx.service is masked.
Demaskieren Sie dann nginx und geben Sie den Startbefehl erneut aus.
sudo systemctl unmask nginx
Beachten Sie, dass der Nginx-Prozess möglicherweise als Benutzer nginx
ausgeführt wird oder www-data
. Dies kann durch Bearbeiten der ersten Zeile in /etc/nginx/nginx.conf
geändert werden Datei. Stellen Sie einfach sicher, dass Nginx als derselbe Benutzer mit PHP-FPM ausgeführt wird.
Überprüfen Sie nun die Konfigurationsargumente von Nginx.
sudo nginx -V
Wie Sie sehen können, haben wir die neueste Version von Nginx, die mit OpenSSL 1.1.1 erstellt wurde.
5. Aktivieren Sie TLS 1.3 im Nginx-Serverblock
Jetzt gehe ich davon aus, dass Sie HTTPS bereits für Ihren Nginx-Serverblock aktiviert haben. Die Syntax zum Aktivieren von TLS 1.3 ist ziemlich einfach. Öffnen Sie Ihre Nginx-Serverblockdatei in /etc/nginx/conf.d/
Verzeichnis oder /etc/nginx/sites-enabled/
Verzeichnis. Suchen Sie die folgende Zeile.
ssl_protocols TLSv1.2;
Fügen Sie TLSv1.3
hinzu zur Liste der Protokolle.
ssl_protocols TLSv1.2 TLSv1.3;
Fügen Sie dann die folgenden 3 Verschlüsselungssammlungen zu Ihren vorhandenen Verschlüsselungssammlungen hinzu.
TLS-CHACHA20-POLY1305-SHA256 TLS-AES-256-GCM-SHA384 TLS-AES-128-GCM-SHA256
so:
ssl_ciphers 'TLS-CHACHA20-POLY1305-SHA256:TLS-AES-256-GCM-SHA384:TLS-AES-128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256';
Speichern und schließen Sie die Datei. Testen Sie dann die Nginx-Konfiguration und laden Sie neu.
sudo nginx -t sudo systemctl reload nginx
Es ist unwahrscheinlich, dass Ubuntu 18.04 auf OpenSSL 1.1.1 umsteigen würde, also wenn Sie Nginx mit sudo apt upgrade
aktualisieren Befehl wird TLS 1.3 weg sein. Es ist eine gute Idee, ein Upgrade von Nginx durch apt
zu verhindern mit diesem Befehl:
sudo apt-mark hold nginx
Update:Ab Nginx 1.15.4 können Sie 0-RTT mit OpenSSL aktivieren, indem Sie die folgende Direktive im SSL-Serverkontext hinzufügen. Der Standardwert ist auf off
gesetzt . In der vorherigen Version 1.15.3 kann es nur mit BoringSSL verwendet werden.
ssl_early_data on
Aktivieren Sie TLS 1.3 in Google Chrome
Derzeit unterstützen Firefox 62 und Chrome 69 nur Entwurf 28 von TLS 1.3. OpenSSL 1.1.1 unterstützt die endgültige Version von TLS 1.3. Implementierungen, die auf der Entwurfsversion und der endgültigen RFC-Version basieren, interagieren nicht miteinander.
Um unseren Nginx-Server jetzt zu testen, müssen wir die Beta-Version von Google Chrome installieren und die endgültige Version von TLS 1.3 aktivieren. Sobald Sie Chrome Beta installiert haben, geben Sie chrome://flags/#tls13-variant
ein in der Adressleiste und wechseln Sie von default
zu Enabled (Final)
. Starten Sie dann Google Chrome neu, damit die Änderung wirksam wird.
Besuchen Sie jetzt Ihre TLS 1.3-fähige Website in Google Chrome Beta und drücken Sie Ctrl+Shift+I
, um die Seite mit den Entwicklertools zu öffnen. Gehen Sie zu Security
Tab. Sie können die verwendete TLS-Version sehen.
Firefox soll die endgültige Version von TLS 1.3 in Firefox 63 ausliefern, geplant für Oktober 2018. In Chrome 70 wird die endgültige Version von TLS 1.3 für ausgehende Verbindungen aktiviert.
Update:Chrome 70 hat Unterstützung für die endgültige Version von TLS 1.3 hinzugefügt, verwendet aber standardmäßig immer noch Entwurf 28 von TLS 1.3.Aktivieren Sie TLS 1.3 mit CloudFlare
Wenn Sie CloudFlare CDN (Content Delivery Network) verwenden, verwendet Ihre Website bereits TLS1.3. Wählen Sie im CloudFlare-Dashboard crypto
aus und Sie sehen die Option zum Aktivieren/Deaktivieren von TLS 1.3. Sie können auch 0-RTT aktivieren. CloudFlare unterstützt sowohl die Entwurfsversion 28 als auch die endgültige Version.
Das ist es! Ich hoffe, dieses Tutorial hat Ihnen geholfen, TLS 1.3 in Nginx unter Ubuntu 18.04 und Ubuntu 16.04 zu aktivieren. Pass auf dich auf.