Wie man Ende-zu-Ende-CloudFlare-SSL-Verschlüsselung einrichtet

Die Einrichtung von SSL für jede Website ist eine Herausforderung. Besucher, Browser und Suchmaschinen belohnen eine ordnungsgemäß Secure Sockets Layer (SSL) gesicherte Website. Früher umfasste dieser Prozess den Kauf, die Installation und Konfiguration eines SSL-Zertifikats. Mit Cloudflare SSL können Sie den SSL-Konfigurationsprozess jedoch mit nur wenigen Klicks abschließen!

In diesem Artikel erfahren Sie, wie Sie Ihre Website mit SSL-Verschlüsselung über Cloudflare konfigurieren können. Arbeiten Sie sich also zu durchgängig verschlüsselten SSL-Verbindungen nach oben!

Voraussetzungen

Um diesem Tutorial zu folgen, sind einige Voraussetzungen erforderlich:

  • A Cloudflare account with an existing website and domain pointed to the Cloudflare nameservers.
  • Ein Ubuntu Linux-Server mit NGINX installiert und konfiguriert. Dieses Tutorial zeigt die Verwendung von Linux und NGINX, aber der gleiche allgemeine Prozess funktioniert auch für IIS oder Apache.

Die Einrichtung von Cloudflare Universal SSL: Nur der Anfang

Es gibt mehrere Möglichkeiten, wie Sie ein SSL-Zertifikat mit Cloudflare konfigurieren können. Oft ist der schnellste Weg, sich für Universal SSL zu entscheiden. Warum? Mit Universal SSL stellt Cloudflare anstelle eines SSL-Zertifikats ein Zertifikat bereit, und der gesamte über Cloudflare gesendete Datenverkehr verwendet dieses Zertifikat.

Nach Aktivierung von Universal SSL stellt Cloudflare sowohl Besuchern als auch Suchmaschinen ein gültiges SSL-Zertifikat bereit. Außerdem ist es nicht erforderlich, den Server oder die Website zur Verwendung dieses Zertifikats zu konfigurieren – einfach genial!

1. Öffnen Sie Ihren Webbrowser und melden Sie sich im Cloudflare-Dashboard an.

2. Wählen Sie Ihre Website aus der Kontodomainliste aus, wie unten gezeigt.

Choose the site to change options for.

3. Klicken Sie nun auf SSL/TLS, um die Verschlüsselungsoptionen Ihrer Website anzuzeigen.

The SSL/TLS Encryption mode page

4. Wählen Sie die Option Flexibel, um Universal SSL zu aktivieren. Nach der Auswahl wird die Änderung sofort wirksam. Ihre Website ist jetzt zwischen dem Browser und Cloudflare verschlüsselt!

Enabling Universal SSL on Cloudflare

Konfiguration der vollständigen End-to-End-SSL-Verschlüsselung

Auch wenn Universal SSL eine großartige Möglichkeit ist, Websites zu sichern, bleibt der Datenverkehr zwischen dem Server und Cloudflare unverschlüsselt. Glücklicherweise gibt es zwei Verschlüsselungsmodi, um den Datenverkehr von Cloudflare zum Server zu verschlüsseln: Volle und Volle (strengere) Verschlüsselung mit jeweils unterschiedlichen Anforderungen an die Zertifikatinstallation.

  • Voll – Erfordert ein Zertifikat auf dem Server, dies kann jedoch ein selbst signiertes Zertifikat sein.
  • Vollständig (streng) – Das installierte serverseitige Zertifikat muss ein gültiges Zertifikat sein.

Lassen Sie uns den Unterschied zwischen diesen Verschlüsselungen und deren Einrichtung besprechen.

Einrichten der vollständigen SSL/TLS-Verschlüsselung mit einem selbstsignierten Zertifikat

Im Gegensatz zu Universal SSL erfordert die vollständige SSL/TLS-Verschlüsselung, dass Ihr Webserver ein SSL-Zertifikat ordnungsgemäß bereitstellt, um den Datenverkehr vom Server zu Cloudflare zu verschlüsseln. Es gibt viele Möglichkeiten, dies zu erreichen, aber dieses Tutorial zeigt die Schritte auf einem Linux-Server mit NGINX.

Generierung eines selbstsignierten Zertifikats

Um die Verbindung zwischen Cloudflare und Ihrem Ursprungsserver zu verschlüsseln, benötigen Sie ein SSL-Zertifikat. Da der Vollständige SSL/TLS-Verschlüsselungsmodus das Zertifikat nicht vollständig vertrauenswürdig erfordert, können Sie ein selbstsigniertes Zertifikat verwenden, um schnell zu starten.

1. Sichere Shell (SSH) in Ihren Linux-Webserver einloggen.

2. Wechseln Sie mit dem Befehl cd in das Standard-SSL-Verzeichnis von Ubuntu (/etc/ssl). Führen Sie dazu den folgenden Befehl aus: cd /etc/ssl

cd /etc/ssl
Navigating to the /etc/ssl directory

3. Generieren Sie nun die öffentlichen und privaten Schlüssel für Ihre Website mit dem Befehl openssl. Führen Sie dazu den folgenden Befehl aus:

Dieser Befehl erledigt einige Dinge:

  • Erfordert ein X.509-Zertifikat, das durch den Parameter -x509 bereitgestellt wird.
  • Ermöglicht es NGINX, das Zertifikat beim Starten mit dem Parameter -nodes zu lesen, wenn es von NGINX referenziert wird.
  • Gibt die Anzahl der Tage an, für die das Zertifikat gültig ist.
  • Erstellt einen neuen öffentlichen und privaten Schlüssel mit -newkey über 2048-Bit-RSA-Verschlüsselung (rsa:2048).
  • Speichert den privaten Schlüssel unter /etc/ssl/private/nginx-selfsigned.key mit dem Parameter -keyout.
  • Speichert den öffentlichen Schlüssel unter /etc/ssl/certs/nginx-selfsigned.crt unter Verwendung des Parameters -out.
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/private/nginx-selfsigned.key -out /etc/ssl/certs/nginx-selfsigned.crt

Wenn openssl einen harmlosen Fehler von Kann /root/.rnd nicht in RNG laden zurückgibt, müssen Sie die Zeile #RANDFILE = $ENV::HOME/.rnd in /etc/ssl/openssl.cnf auskommentieren. Alle modernen Versionen von openssl greifen auf das Systemgerät /dev/urandom für zufällige Entropiedaten zurück und benötigen keine spezifische Datei zur Initialisierung.

4. Nach erfolgreichem Ausführen des Befehls wird openssl Sie um einige Informationen bitten. Im Folgenden finden Sie alle Werte, die für dieses Tutorial bereitgestellt wurden.

  • Ländername: US
  • Staat oder Provinz Name: Illinois
  • Ortsname: Bloomington
  • Organisationsname: Test Company, LLC
  • Name der organisatorischen Einheit: <leer>
  • Allgemeiner Name: test.adamlistek.me
  • E-Mail-Adresse: [email protected]
Generating a self-signed certificate

5. Überprüfen Sie abschließend, ob das Zertifikat mit dem test-Befehl existiert. Wenn der test-Befehl (echo $?) 0 zurückgibt, existiert die Datei wie erwartet. Sie können in dem folgenden Screenshot sehen, dass jeder Befehl einen Wert von 0 zurückgegeben hat.

test -f /etc/ssl/private/nginx-selfsigned.key; echo $?
 test -f /etc/ssl/certs/nginx-selfsigned.crt; echo $?
Verifying that the certificate files exist

Konfigurieren von NGINX

Nachdem das Zertifikat generiert und an den Speicherorten /etc/ssl/certs und /etc/ssl/private gespeichert wurde, muss NGINX konfiguriert werden, um das Zertifikat anzuwenden und den Inhalt der Website bereitzustellen.

NGINX-Sitekonfigurationen werden in server-Blöcken definiert, die normalerweise in virtuellen Host-Dateien enthalten sind. Im folgenden Beispiel wird die grundlegende Sitekonfiguration in der Datei test.adamlistek.me.conf gespeichert und in die Hauptdatei nginx.conf einbezogen.

1. Erstellen Sie zunächst eine neue virtuelle Host-Datei mit dem von Ihnen gewählten Namen, aber für dieses Beispiel benennen Sie sie test.adamlistek.me.conf im Verzeichnis /etc/nginx/vhosts.d. Kopieren Sie dann den untenstehenden Inhalt in die virtuelle Host-Datei und speichern Sie sie.

Ersetzen Sie den Domainnamen test.adamlistek.me durch Ihren eigenen, da dies nur zu Demonstrationszwecken dient. Und wenn der /etc/nginx/vhosts.d Speicherort nicht existiert, erstellen Sie das Verzeichnis, indem Sie mkdir /etc/nginx/vhosts.d ausführen.

server {
   # Hören Sie auf Port 80 für IPv4 und IPv6
   listen 80;
   listen [::]:80;
 server_name test.adamlistek.me;
 # Führen Sie eine 301-Weiterleitung mit allen Parametern zum SSL-Serverblock unten aus
   return 301 https://test.adamlistek.me$request_uri;
 }
 server {
   # Hören Sie auf Port 443 für IPv4 und IPv6 mit aktiviertem HTTP2 (erfordert SSL)
   listen 443 ssl http2;
   listen [::]:443 ssl http2;
 server_name test.adamlistek.me;
 # Der Speicherort des öffentlichen und privaten Zertifikats
   ssl_certificate /etc/ssl/certs/nginx-selfsigned.crt;
   ssl_certificate_key /etc/ssl/private/nginx-selfsigned.key;
 # Der Speicherort der Webdateien zum Laden, dies ist der Standard-Nginx-Speicherort
   root /usr/share/nginx/html;
 # Die Standarddatei, die bei einer Anforderung der Root-Domäne bereitgestellt wird
   index index.html;
 }

2. Überprüfen Sie, ob Ihre primäre NGINX-Konfigurationsdatei, /etc/nginx/nginx.conf, die erforderliche include-Zeile innerhalb des http-Blocks enthält, der sich am Ende des Blocks befindet.

# Serverkonfigurationen kommen hierhin
 …
 http {
     # Zusätzliche Konfigurationen kommen hierhin# Virtuelle Hosts einbinden
     include /etc/nginx/vhosts.d/*.conf;
 }

3. Starten Sie NGINX mit dem folgenden Befehl neu, wenn Sie systemd verwenden, das ein moderner System- und Dienst-Manager für Linux ist.

service nginx restart

4. Zurück zu Cloudflare, überprüfen Sie, ob das selbstsignierte Zertifikat funktioniert. Deaktivieren Sie dazu das „orange-cloud“ für den DNS-Eintrag unter Proxy-Status, wie unten gezeigt. Durch Deaktivieren der Option „orange-cloud“ umgehen Sie Cloudflare und bedienen Anfragen direkt vom Webserver.

Disabling Cloudflare proxying via Proxy Status.

5. Stellen Sie sicher, dass die Website das neu erstellte selbstsignierte Zertifikat zurückgibt, indem Sie zur Website in Ihrem Webbrowser navigieren. Dadurch wird eine Warnseite angezeigt, wie unten dargestellt.

Displaying the self-signed certificate error.

6. Aktivieren Sie schließlich die Vollständige TLS/SSL-Verschlüsselung auf Cloudflare. Um dies zu tun, aktivieren Sie den „orange-cloud“ Cloudflare-Proxy-Status auf dem zuvor deaktivierten DNS-Eintrag erneut. Navigieren Sie dann zum SSL/TLS-Tab und klicken Sie auf die unten gezeigte Full-Option.

Enabling Full SSL/TLS encryption on Cloudflare.

Generieren von Ursprungszertifikaten für die Vollständige (strengere) SSL/TLS-Verschlüsselung

Der Vollständige Verschlüsselungsmodus garantiert nicht, dass das vom Webserver präsentierte Zertifikat eine tatsächlich gültige Zertifikatkette hat. Wählen Sie daher die nicht-strengere Verschlüsselung, und Cloudflare akzeptiert jedes vom Server präsentierte Zertifikat.

Cloudflare bietet die Möglichkeit, ein kostenloses TLS-Zertifikat zu generieren, um die Verbindung zum Ursprungsserver zu sichern. Es gibt jedoch zwei Nachteile bei der Verwendung eines von Cloudflare bereitgestellten Ursprungszertifikats. Erstens müssen Sie das Zertifikat manuell generieren und installieren. Zweitens erscheint das Zertifikat wie ein selbstsigniertes Zertifikat, dem kein Browser außer Cloudflare vertrauen würde.

Es ist möglich, die Zertifikatserzeugung mithilfe der Origin CA Create Certificate API Endpoint zu automatisieren, aber das fällt nicht in den Rahmen dieses Tutorials.

1. Gehen Sie zu dem Ursprungsserver, indem Sie zum SSL/TLS-Tab gehen und auf Ursprungsserver klicken, wie unten dargestellt. Klicken Sie dann auf die Schaltfläche Zertifikat erstellen.

Navigating to the Origin Server page.

2. Wie Sie unten sehen können, sind die Standardoptionen bereits so eingestellt, dass ein Wildcard-Zertifikat für die Domain mit einer Gültigkeitsdauer von 15 Jahren generiert wird – süß! Lassen Sie also die Standardoptionen unverändert und generieren Sie das Zertifikat, indem Sie auf die Schaltfläche Erstellen unten rechts auf der Seite klicken.

A wildcard certificate, shown as *.domain.com, means that any subdomain will also be covered by this certificate including www.

Creating a Cloudflare-provided origin server certificate.

3. Fügen Sie das neu erstellte Zertifikat zu Ihrem Linux-System hinzu, indem Sie zunächst die privaten und öffentlichen Schlüssel mit dem Texteditor GNU nano speichern. Da zwei Schlüssel gespeichert werden müssen, müssen Sie die Schlüsseldateien nacheinander speichern.

Stellen Sie sicher, dass Sie den privaten Schlüssel speichern, da er nur zum Zeitpunkt der Generierung eines Originalzertifikats verfügbar ist. Wenn Sie diesen Schlüssel versehentlich verlieren, widerrufen Sie das Zertifikat und erstellen Sie ein neues Zertifikat.

Öffnen Sie ein Terminal und erstellen und öffnen Sie die öffentliche Schlüsseldatei (nginx-test.adamlistek.me.crt) in nano, indem Sie den ersten Befehl unten ausführen.

Gehen Sie dann zurück zu Cloudflare und kopieren Sie den Origin Certificate-Schlüssel (öffentlicher Schlüssel), indem Sie auf die Option Zum Kopieren klicken klicken, wie unten gezeigt. Fügen Sie dann (Strg+U) den kopierten öffentlichen Schlüssel in die in nano geöffnete öffentliche Schlüsseldatei ein. Speichern Sie die Änderungen (Strg+O) und beenden Sie nano (Strg+X).

Nachdem Sie die öffentliche Schlüsseldatei gespeichert haben, wiederholen Sie den gleichen Vorgang, um die Schlüsseldatei zu erstellen, den Schlüssel von Cloudfare zu kopieren und ihn in der Schlüsseldatei zu speichern. Diesmal erstellen Sie jedoch die private Schlüsseldatei (nginx-test.adamlistek.me.key).

# Der öffentliche Schlüssel unter dem Abschnitt "Origin Certificate"
 nano /etc/ssl/certs/nginx-test.adamlistek.me.crt
# Der private Schlüssel unter dem Abschnitt mit dem gleichen Namen
 nano /etc/ssl/private/nginx-test.adamlistek.me.key
Copying the public/private certificate key information.

4. Nachdem Sie die öffentlichen und privaten Schlüssel erstellt haben, zeigen Sie NGINX den Speicherort der Zertifikate an. Tun Sie dies, indem Sie die Konfigurationsdatei test.adamlistek.me.conf mit den unten stehenden Zeilen ändern, angepasst an Ihre Domain.

 ssl_certificate /etc/ssl/certs/nginx-test.adamlistek.me.crt;
 ssl_certificate_key /etc/ssl/private/nginx-test.adamlistek.me.key;

5. Um die neuen Zertifikate anzuwenden, starten Sie NGINX mit dem folgenden Befehl neu.

service nginx restart

6. Zurück zum Tab SSL/TLS in Cloudflare. Aktualisieren Sie den SSL/TLS-Verschlüsselungsmodus, indem Sie auf Full (strict) klicken, wie unten gezeigt.

Setting the Encryption mode to Full (strict).

Aktivieren der Full (strict) SSL/TLS-Verschlüsselung mit LetsEncrypt

Der größte Nachteil bei Verwendung eines Cloudflare-Origin-Zertifikats besteht darin, dass es nur von Cloudflare vertraut wird. Falls Sie ein vollständig vom Browser vertrauenswürdiges Zertifikat benötigen, entweder als Rückfall oder für mehr Kontrolle, bietet LetsEncrypt die Möglichkeit, ein ordnungsgemäßes Zertifikat zu generieren.

Auch wenn Sie ein beliebiges gültiges Zertifikat verwenden können, ist LetsEncrypt eine gängige Wahl, um ein gültiges Zertifikat zu generieren. Es gibt mehrere LetsEncrypt-Clients, aber dieses Tutorial zeigt den acme.sh-Client.

Da Sie bereits auf Cloudflare sind, ist eine der besten Methoden für die DNS-Bereitstellung mit LetsEncrypt die Verwendung der DNS-Option.

1. Öffnen Sie zuerst Ihr Terminal und installieren Sie acme.sh über den curl-Befehl.

curl https://get.acme.sh | sh
Installing the acme.sh client.

2. Als Nächstes ist es erforderlich, die Datei account.conf im Installationsverzeichnis zu erstellen oder zu ändern, um die gespeicherten Cloudflare-API-Schlüssel hinzuzufügen. Diese Schlüssel finden Sie im Abschnitt Profil —> API-Tokens des Cloudflare-Dashboards.

Obwohl Sie einen spezifischen, auf Berechtigungen beschränkten Token erstellen können, verwenden Sie für die Zwecke dieses Tutorials stattdessen den Globalen API-Schlüssel, wie unten gezeigt.

SAVED_CF_Key='cloudflareglobalapikey'
 SAVED_CF_Email='[email protected]'

3. Generieren Sie das Zertifikat über den folgenden Befehl. Beachten Sie, dass der folgende Befehl dem acme.sh-Client mitteilt, Cloudflare (dns_cf) zur Überprüfung (--dns) des Besitzes des Zertifikats zu verwenden. Dann wird die Wartezeit (--dnsslep) auf 20 Sekunden festgelegt, bevor das Zertifikat für (-d) die Domäne (test.adamlistek.me) ausgestellt wird.

Wenn der Befehl abgeschlossen ist, sehen Sie unten die Pfade, unter denen Sie Ihr Zertifikat, das Zertifikatsschlüssel, das Zwischen-CA-Zertifikat und die vollständigen Zertifikatsketten finden können.

acme.sh --issue --dns dns_cf --dnssleep 20 -d test.adamlistek.me
Generating the LetsEncrypt certificate.

4. Wie zuvor, ändern Sie die NGINX-Site-Konfiguration, um den Speicherort des ssl_certificate und des ssl_certificate_key zu ändern. Stellen Sie sicher, dass Sie /home/user durch den Speicherort ersetzen, an dem Ihre acme.sh-Installation stattfindet.

ssl_certificate /home/user/.acme.sh/test.adamlistek.me/test.adamlistek.me.csr;
 ssl_certificate_key /home/user/.acme.sh/test.adamlistek.me/test.adamlistek.me.key;

5. Wenden Sie die neue Konfiguration an, indem Sie NGINX mit dem folgenden Befehl neu starten.

service nginx restart

6. Aktualisieren Sie abschließend Ihren Cloudflare SSL/TLS-Verschlüsselungsmodus, indem Sie zu SSL/TLS gehen und dann auf Vollständig (streng) klicken.

Setting the Encryption mode to Full (strict).

Abschluss

Im Verlauf dieses Tutorials haben Sie gelernt, wie Sie Ihre Website mit den verschiedenen von Cloudflare bereitgestellten SSL/TLS-Optionen sichern können. Durch Hinzufügen von LetsEncrypt zu Ihrer Cloudflare SSL-Konfiguration erhalten Sie eine flexible und benutzerfreundliche Ursprungszertifikatsoption!

Mit dem Wissen über verschiedene Optionen zur Absicherung der Verbindung zum Besucher der Website werden Sie sich bis zu einer vollständig gesicherten Verbindung zu Ihrem Server mit Cloudflare SSL arbeiten?

Source:
https://adamtheautomator.com/cloudflare-ssl/