So sichern Sie Apache mit Let’s Encrypt unter Debian 8

Einführung

Dieses Tutorial zeigt Ihnen, wie Sie ein TLS / SSL-Zertifikat von Let’s Encrypt auf einem Debian 8-Server einrichten, auf dem Apache als Webserver ausgeführt wird. Wir werden auch erläutern, wie der Prozess der Zertifikatserneuerung mithilfe eines Cron-Jobs automatisiert wird.

SSL-Zertifikate werden auf Webservern verwendet, um den Datenverkehr zwischen Server und Client zu verschlüsseln. Dies bietet zusätzliche Sicherheit für Benutzer, die auf Ihre Anwendung zugreifen. Let’s Encrypt bietet eine einfache Möglichkeit, vertrauenswürdige Zertifikate kostenlos abzurufen und zu installieren.

Voraussetzungen

Um diesen Leitfaden zu vervollständigen, benötigen Sie einen Debian 8-Server mit einem Benutzer ohne Rootberechtigung, + sudo +, für administrative Aufgaben. Sie können einen Benutzer mit den entsprechenden Berechtigungen einrichten, indem Sie unserem Debian 8-Handbuch zur Ersteinrichtung des Servers folgen.

Sie müssen den registrierten Domainnamen besitzen oder kontrollieren, mit dem Sie das Zertifikat verwenden möchten. Wenn Sie noch keinen registrierten Domainnamen haben, können Sie einen bei einem der vielen Domainnamen-Registrare registrieren (z. Namecheap, GoDaddy usw.).

Wenn Sie dies noch nicht getan haben, müssen Sie einen * A Record * erstellen, der Ihre Domain auf die öffentliche IP-Adresse Ihres Servers verweist. Wenn Sie den DNS von DigitalOcean verwenden, können Sie https://www.digitalocean.com/community folgen / tutorials / wie-ein-host-name-mit-digitalocean-eingerichtet wird [diese anleitung]). Dies ist erforderlich, da Let’s Encrypt überprüft, ob Sie die Domäne besitzen, für die ein Zertifikat ausgestellt wird. Wenn Sie beispielsweise ein Zertifikat für "+ example.com " erhalten möchten, muss diese Domain auf Ihren Server aufgelöst werden, damit der Überprüfungsprozess funktioniert. Unser Setup verwendet " example.com " und " www.example.com +" als Domainnamen, daher sind * beide DNS-Einträge erforderlich *.

Wenn Sie bereit sind, fortzufahren, melden Sie sich mit Ihrem sudo-Konto bei Ihrem Server an.

Schritt 1: Installieren Sie Certbot, den Let’s Encrypt Client

Der erste Schritt zur Verwendung von Let’s Encrypt zum Abrufen eines SSL-Zertifikats besteht darin, den "+ certbot +" Let’s Encrypt-Client auf Ihrem Server zu installieren.

Das "+ certbot " - Paket war nicht verfügbar, als Debian 8 veröffentlicht wurde. Um auf das " certbot +" - Paket zugreifen zu können, müssen wir das Jessie-Backports-Repository auf unserem Server aktivieren. Dieses Repository kann verwendet werden, um neuere Softwareversionen als die in den Stable-Repositorys enthaltenen zu installieren.

Fügen Sie das Backports-Repository zu Ihrem Server hinzu, indem Sie Folgendes eingeben:

echo 'deb http://ftp.debian.org/debian jessie-backports main' | sudo tee /etc/apt/sources.list.d/backports.list

Aktualisieren Sie nach dem Hinzufügen des neuen Repositorys den Paketindex "+ apt +", um Informationen zu den neuen Paketen herunterzuladen:

sudo apt-get update

Sobald das Repository aktualisiert ist, können Sie das Paket "+ python-certbot-apache " installieren, das " certbot +" einsetzt, indem Sie auf das Backports-Repository abzielen:

sudo apt-get install python-certbot-apache -t jessie-backports

Der + certbot + Client sollte nun einsatzbereit sein.

Schritt 2: Richten Sie den Apache-Servernamen und die ServerAlias ​​ein

Es ist möglich, die Domänen, die wir als Argumente sichern möchten, beim Aufrufen des Hilfsprogramms + certbot + zu übergeben. + Certbot + kann diese jedoch auch aus der Apache-Konfiguration selbst lesen. Da es empfehlenswert ist, immer explizit anzugeben, auf welche Domänen Ihr Server antworten soll, setzen wir die Zeichen "+ ServerName " und " ServerAlias ​​+" direkt in der Apache-Konfiguration.

Bei der Installation des Servers + python-certbot-apache wurde Apache installiert, sofern es nicht bereits auf dem System vorhanden war. Öffnen Sie die standardmäßige Apache Virtual Host-Datei, damit wir unsere Domain-Namen explizit festlegen können:

sudo nano /etc/apache2/sites-available/000-default.conf

Fügen Sie im Block "Virtual Host" die Direktive "+ ServerName " hinzu oder entfernen Sie das Kommentarzeichen, und setzen Sie sie auf Ihren primären Domänennamen. Alle alternativen Domain-Namen, auf die dieser Server ebenfalls antworten soll, können mit der Direktive " ServerAlias ​​+" hinzugefügt werden.

In unserem Beispiel verwenden wir "+ example.com " als kanonischen Namen und " www.example.com +" als Alias. Wenn wir diese Anweisungen festlegen, sieht es so aus:

/etc/apache2/sites-available/000-default.conf

<VirtualHost *:80>
   . . .
   ServerName
   ServerAlias
   . . .
</VirtualHost>

Wenn Sie fertig sind, speichern und schließen Sie die Datei, indem Sie * CTRL * gedrückt halten und * X * drücken. Geben Sie * Y * ein und drücken Sie * Enter *, um die Datei zu speichern.

Überprüfen Sie die Konfigurationsdatei auf Syntaxfehler, die möglicherweise durch Ihre Änderungen verursacht wurden:

sudo apache2ctl configtest

Suchen Sie nach dieser Zeile in der Ausgabe:

OutputSyntax OK

Wenn die Datei den Syntaxtest bestanden hat, starten Sie Ihren Apache-Dienst neu, um Ihre Änderungen zu implementieren:

sudo systemctl restart apache2

Da Apache nun mit Ihren Domainnamen konfiguriert ist, können wir "+ certbot +" verwenden, um unsere SSL-Zertifikate abzurufen.

Schritt 3: Anpassen der Firewall

Wenn Sie eine Firewall aktiviert haben, müssen Sie die Einstellungen anpassen, um SSL-Datenverkehr zuzulassen. Das erforderliche Verfahren hängt von der verwendeten Firewall-Software ab. Wenn Sie derzeit keine Firewall konfiguriert haben, können Sie vorwärts springen.

UFW

Wenn Sie * ufw * verwenden, können Sie die aktuelle Einstellung anzeigen, indem Sie Folgendes eingeben:

sudo ufw status

Es könnte so aussehen, was bedeutet, dass nur SSH-Verkehr zum Webserver erlaubt ist:

OutputStatus: active

To                         Action      From
--                         ------      ----
SSH                        ALLOW       Anywhere
SSH (v6)                   ALLOW       Anywhere (v6)

Um zusätzlich HTTP- und HTTPS-Verkehr zuzulassen, können wir das Anwendungsprofil "WWW Full" zulassen:

sudo ufw allow 'WWW Full'

Ihr Status sollte jetzt so aussehen:

sudo ufw status
OutputStatus: active

To                         Action      From
--                         ------      ----
SSH                        ALLOW       Anywhere
WWW Full                   ALLOW       Anywhere
SSH (v6)                   ALLOW       Anywhere (v6)
WWW Full (v6)              ALLOW       Anywhere (v6)

HTTP- und HTTPS-Anforderungen sollten jetzt von Ihrem Server akzeptiert werden.

IPTables

Wenn Sie "+ iptables +" verwenden, können Sie die aktuellen Regeln anzeigen, indem Sie Folgendes eingeben:

sudo iptables -S

Wenn Sie Regeln aktiviert haben, werden diese angezeigt. Eine Beispielkonfiguration könnte folgendermaßen aussehen:

Output-P INPUT DROP
-P FORWARD ACCEPT
-P OUTPUT ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT

Die zum Öffnen des SSL-Datenverkehrs erforderlichen Befehle hängen von Ihren aktuellen Regeln ab. Für einen grundlegenden Regelsatz wie den oben genannten können Sie den SSL-Zugriff hinzufügen, indem Sie Folgendes eingeben:

sudo iptables -I INPUT -p tcp --dport 443 -j ACCEPT

Wenn wir uns die Firewall-Regeln noch einmal ansehen, sollten wir die neue Regel sehen:

sudo iptables -S
Output-P INPUT DROP
-P FORWARD ACCEPT
-P OUTPUT ACCEPT

-A INPUT -i lo -j ACCEPT
-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT

Wenn Sie ein Programm verwenden, um "+ iptables +" - Regeln beim Booten automatisch anzuwenden, sollten Sie sicherstellen, dass Sie Ihre Konfiguration mit der neuen Regel aktualisieren.

Schritt 4: Richten Sie das SSL-Zertifikat ein

Das Generieren des SSL-Zertifikats für Apache mit dem Let’s Encrypt-Client ist recht einfach. Der Client erhält und installiert automatisch ein neues SSL-Zertifikat, das für die Domains in unserer Apache-Konfiguration gültig ist.

Geben Sie Folgendes ein, um die interaktive Installation auszuführen und ein Zertifikat für alle in Ihrer Apache-Konfiguration definierten Domänen abzurufen:

sudo certbot --apache

Das Dienstprogramm "+ certbot +" wertet Ihre Apache-Konfiguration aus, um die Domänen zu finden, die mit dem angeforderten Zertifikat abgedeckt werden sollen. Sie können alle definierten Domänen abwählen, die nicht vom Zertifikat abgedeckt werden sollen.

Sie erhalten eine schrittweise Anleitung zum Anpassen Ihrer Zertifikatoptionen. Sie werden aufgefordert, eine E-Mail-Adresse für die Wiederherstellung verlorener Schlüssel und Benachrichtigungen anzugeben. Sie können wählen, ob Sie den Zugriff auf "+ http " und " https " aktivieren oder alle Anforderungen zur Weiterleitung an " https " zwingen möchten. Es ist normalerweise am sichersten, " https " zu benötigen, es sei denn, Sie benötigen speziell unverschlüsselten " http +" - Datenverkehr.

Wenn die Installation abgeschlossen ist, sollten Sie in der Lage sein, die generierten Zertifikatsdateien unter + / etc / letsencrypt / live + zu finden. Sie können den Status Ihres SSL-Zertifikats über den folgenden Link überprüfen (vergessen Sie nicht, das Zertifikat durch Ihre Domain zu ersetzen):

https://www.ssllabs.com/ssltest/analyze.html?d=&latest

Der Test kann einige Minuten dauern. Sie sollten nun in der Lage sein, mit einem "+ https +" - Präfix auf Ihre Website zuzugreifen.

Schritt 5: Automatische Verlängerung einrichten

"Zertifikate verschlüsseln" hat eine Gültigkeit von 90 Tagen. Es wird jedoch empfohlen, die Zertifikate alle 60 Tage zu erneuern, um eine Fehlerquote zu erzielen. Der "+ certbot " - Client verfügt über einen " renew +" - Befehl, der die aktuell installierten Zertifikate automatisch überprüft und versucht, sie zu erneuern, wenn sie weniger als 30 Tage vor dem Ablaufdatum liegen.

Um den Erneuerungsprozess für alle installierten Domänen auszulösen, sollten Sie Folgendes ausführen:

sudo certbot renew

Da wir das Zertifikat kürzlich installiert haben, überprüft der Befehl nur das Ablaufdatum und gibt eine Meldung aus, dass das Zertifikat noch nicht erneuert werden muss. Die Ausgabe sollte ungefähr so ​​aussehen:

OutputSaving debug log to /var/log/letsencrypt/letsencrypt.log

-------------------------------------------------------------------------------
Processing /etc/letsencrypt/renewal/.conf
-------------------------------------------------------------------------------
Cert not yet due for renewal

The following certs are not due for renewal yet:
 /etc/letsencrypt/live//fullchain.pem (skipped)
No renewals were attempted.

Beachten Sie, dass, wenn Sie ein gebündeltes Zertifikat mit mehreren Domänen erstellt haben, in der Ausgabe nur der Basisdomänenname angezeigt wird. Die Verlängerung sollte jedoch für alle in diesem Zertifikat enthaltenen Domänen gültig sein.

Eine praktische Möglichkeit, um sicherzustellen, dass Ihre Zertifikate nicht veraltet sind, besteht darin, einen Cron-Job zu erstellen, der den Befehl zur automatischen Verlängerung regelmäßig für Sie ausführt. Da bei der Erneuerung zunächst nach dem Ablaufdatum gesucht wird und die Erneuerung nur ausgeführt wird, wenn das Zertifikat weniger als 30 Tage vor dem Ablaufdatum liegt, ist es sicher, einen Cron-Job zu erstellen, der beispielsweise jede Woche oder sogar jeden Tag ausgeführt wird.

Bearbeiten Sie die crontab, um einen neuen Job zu erstellen, der den Befehl renewal jede Woche ausführt. Führen Sie Folgendes aus, um die Crontab für den Root-Benutzer zu bearbeiten:

sudo crontab -e

Möglicherweise werden Sie aufgefordert, einen Editor auszuwählen:

Outputno crontab for root - using an empty one

Select an editor.  To change later, run 'select-editor'.
 1. /bin/nano        <---- easiest
 2. /usr/bin/vim.basic
 3. /usr/bin/vim.tiny

Choose 1-3 [1]:

Wenn Sie mit "+ vim " nicht zufrieden sind, drücken Sie die Eingabetaste, um " nano +" als Standard zu verwenden.

Fügen Sie am Ende der crontab den folgenden Inhalt in eine Zeile ein:

crontab. . .
30 2 * * 1 /usr/bin/certbot renew >> /var/log/le-renew.log

Speichern und schließen. Dadurch wird ein neuer Cron-Job erstellt, der jeden Montag um 2:30 Uhr den Befehl "+ letsencrypt-auto renew " ausführt. Die vom Befehl erzeugte Ausgabe wird an eine Protokolldatei weitergeleitet, die sich unter ` / var / log / le-renewal.log +` befindet.

Fazit

In diesem Handbuch wurde beschrieben, wie Sie ein kostenloses SSL-Zertifikat von Let’s Encrypt installieren, um eine mit Apache gehostete Website zu sichern. Wir empfehlen, dass Sie von Zeit zu Zeit im offiziellen Lets Encrypt-Blog nach wichtigen Updates suchen.