Sichere Website auf AWS mit Minimalaufwand, Teil 2 Let’s-Encrypt-Zertifikate für AWS Lightsail anfordern

Mit nur wenigen Mausklicks haben wir eine Wordpress-Website auf AWS Lightsail bereitgestellt und mit einem öffentlichen Domain-Namen verknüpft. Nun können wir im zweiten Teil dieses Workshops die SSL-Zertifikate von Let’s Encrypt anfordern und anschließend die SSL-Umleitung für Apache und in Wordpress einrichten.

Aus Sicherheitsgründen ist es sinnvoll, den aktuellen Zustand unserer Instanz in einem Snapshot festzuhalten.
Aus Sicherheitsgründen ist es sinnvoll, den aktuellen Zustand unserer Instanz in einem Snapshot festzuhalten.
(Bild: Drilling / AWS)

Um HTTPS für eine Webseite aktivieren zu können braucht man bekanntlich ein Zertifikat von einer Zertifizierungsstelle (Certificate Authority, CA) wie z. B. Let’s Encrypt. Dieser Anbieter rückt allerdings nur dann Zertifikate heraus, wenn der Nutzer nachweisen kann, dass er Besitzer der betreffenden Domain ist.

Certbot

Let’s Encrypt nutzt dazu das das https://ietf-wg-acme.github.io/acme/ ACME Protokoll. Das funktioniert am einfachsten, wenn man selbst Shell- bzw. SSH-Zugang zum Webserver hat, wie das bei Lightsail der Fall ist. Das Werkzeug der Wahl zur Benutzung des ACME-Protokolls ist https://certbot.eff.org/ Certbot ACME.

Das Tool kann Zertifikate automatisch ohne Ausfallzeit erstellen und installieren. Es ist einfach zu benutzen, besitzt einen Expertenmodus, falls keine Autokonfiguration gewünscht ist, funktioniert auf vielen Betriebssystemen und ist bestens dokumentiert. Einzelheiten dazu finden sich auf der https://certbot.eff.org/ Certbot-Webseite.

Aus Sicherheitsgründen ist es sinnvoll, den aktuellen Zustand unserer Instanz in einem Snapshot festzuhalten.
Aus Sicherheitsgründen ist es sinnvoll, den aktuellen Zustand unserer Instanz in einem Snapshot festzuhalten.
(Bild: Drilling / AWS)

Bevor man mit Certbot experimentiert, kann man in Lightsail aus Sicherheitsgründen sehr einfach im Menü „Snapshots“ einen manuellen oder automatisierten Snapshot der aktuellen Instanz anlegen. Anschließend stellt man in der Lightsail-Console mit einem Klick auf „Connect“ eine SSH-Verbindung zur Console des Lightsail-Servers her.

Ein grundlegendes Update des Bitnami-Unterbaus ist ebenfalls angeraten.
Ein grundlegendes Update des Bitnami-Unterbaus ist ebenfalls angeraten.
(Bild: Drilling / AWS)

Nach einem Update des Unterbaues mit …

sudo apt-get update

… installiert man zunächst das Paket „Software-Properties“, …

sudo apt-get install software-properties-common

… und ergänzt danach das Repository (PPA) für Certbot mit …

Hinzufügen des Certbot-Repositories.
Hinzufügen des Certbot-Repositories.
(Bild: Drilling / AWS)

sudo apt-add-repository ppa:certbot/certbot -y

Dann aktualisiert man noch einmal die Paketquellen mit …

sudo apt-get update -y

…, um schlussendlich Certbot installieren zu können:

sudo apt-get install certbot -y

Jetzt fordern wir mit Certbot ein Platzhalterzertifikat an, mit dem wir ein einzelnes Zertifikat für eine Domäne und deren Unterdomänen verwenden können. Beispielsweise funktioniert ein einzelnes Platzhalterzertifikat für die Top-Level-Domain „example.com“ sowie für die Subdomains „blog.example.com“ und „stuff.example.com“. Dazu legen wir zunächst der Einfachheit halber zwei Umgebungsvariablen an:

DOMAIN=<example.com>
WILDCARD=*.$DOMAIN

In unserem Beispiel wäre das:

DOMAIN=drilling-aws.de
WILDCARD=*.$DOMAIN

Dann fordern wir das Zertifikat mit folgendem Befehl an:

sudo certbot -d $DOMAIN -d $WILDCARD --manual --preferred-challenges dns certonly

Beim Anforern des Zertifikats wird die IP mitgeloggt.
Beim Anforern des Zertifikats wird die IP mitgeloggt.
(Bild: Drilling / AWS)

Dabei ist eine E-Mail-Adresse anzugeben, welche für das etwaige Erneuern von Zertifikaten und für Sicherheits-Benachrichtigungen benötigt wird. Man achte auf die Warnung, dass die IP-Adresse protokolliert wird.

Nun muss man gegenüber Let´s Encrypt nachweisen, dass man Besitzer der angegebenen Domain ist. Dies erfolgt durch Anlegen der zwei nacheinander in der Console angezeigten TXT-Records (je einmal ENTER drücken) mit dem Schlüssel „_acme-challenge“ im Lightsail-DNS. Das Hinzufügen der DNS-Einträge kann direkt in der Lightsail-Console erfolgen.

Wir fügen die DNS-Einträge direkt in Lightsail als txt-Datensatz hinzu.
Wir fügen die DNS-Einträge direkt in Lightsail als txt-Datensatz hinzu.
(Bild: Drilling / AWS)

Dazu wechselt man zum Abschnitt „Netzwerk“ und klickt dann auf die drei Punkte rechts neben der angezeigten DNS_Zone, um zum Menü „Verwalten“ zu gelangen. Dort klickt man wie im ersten Teil des Beitrags beim A-Record schon erläutert auf „Datensatz hinzufügen“. Hier wählen wir diesmal die Option „TXT-Datensatz“. In Summe bedarf es zweier Datensätze mit dem Schlüssel „_acme-challenge.<domain>.

Aber Achtung: zwei Values auf separater Zeile für den gleichen Schlüssel sind durchaus erlaubt, während es nicht möglich ist, zwei Records mit dem gleichen Schlüssel anzulegen. Dabei muss das Console-Fenster der Instance geöffnet bleiben. Die Weitergabe von DNS-Einträgen kann übrigens eine Weile dauern, abhängig vom betreffenden DNS-Anbieter und dessen konfigurierter TTL (Time to Live) für DNS-Einträge.

Über die MX-Toolbox lässt sich verifizieren, dass die Datensätze richtig übernommen wurden.
Über die MX-Toolbox lässt sich verifizieren, dass die Datensätze richtig übernommen wurden.
(Bild: Drilling / MXToolbox)

Bei Lightsail-DNS bzw. Route 53 geht das allerdings sehr schnell. Es ist sehr wichtig, den Schritt fehlerfrei auszuführen und sich zu überzeugen, dass die TXT-Datensätze korrekt weitergegeben wurden, bevor man den Prozess in der Certbot-Zertifikatanforderung abschließt. Prüfen kann man die korrekte Weitergabe z. B. mit dem Online-Tool-Sammlung https://mxtoolbox.com/ MXToolbox. Das Tool zum Überprüfen von TXT-Einträgen findet sich unter konkret unter https://mxtoolbox.com/TXTLookup.aspx. Hier trägt man dann ein:

_acme-challenge.<domain>

Die Quittierung der Zertifikate durch Certbot enthält einen Hinweis auf das Ablaufdatum des Zertifikats.
Die Quittierung der Zertifikate durch Certbot enthält einen Hinweis auf das Ablaufdatum des Zertifikats.
(Bild: Drilling / AWS)

War die Prüfung erfolgreich, bekommt man auch in der Lightsail-Console eine positive Quittung. Certbot speichert die SSL-Zertifikats-, Ketten- und Schlüsseldateien explizit in dem Verzeichnis /etc/letsencrypt/live/$DOMAIN/privkey.pem auf der Wordpress-Instanz. Am besten notiert man sich in der Ausgabe auch gleich das Ablaufdatum. Dieses wird benötigt, um das Zertifikat bis zu diesem Datum zu erneuern.

Jetzt Newsletter abonnieren

Täglich die wichtigsten Infos zu Softwareentwicklung und DevOps

Mit Klick auf „Newsletter abonnieren“ erkläre ich mich mit der Verarbeitung und Nutzung meiner Daten gemäß Einwilligungserklärung (bitte aufklappen für Details) einverstanden und akzeptiere die Nutzungsbedingungen. Weitere Informationen finde ich in unserer Datenschutzerklärung.

Aufklappen für Details zu Ihrer Einwilligung

Sobald die Zertifikate vorliegen müssen wir noch Links zu den Let’s Encrypt SSL-Zertifikatdateien im Apache-Verzeichnis der Wordpress-Instanz anlegen. Zum Erstellen der Links müssen wir in der SSH-Sitzung von Lightsail zunächst die zugrunde liegenden Dienste stoppen. Bei Bitnami klappt das wie folgt:

sudo /opt/bitnami/ctlscript.sh stop

Jetzt benennen wir die vorhandenen (Default)-Zertifikatdateien sicherheitshalber um:

sudo mv /opt/bitnami/apache2/conf/server.crt /opt/bitnami/apache2/conf/server.crt.alt
sudo mv /opt/bitnami/apache2/conf/server.key /opt/bitnami/apache2/conf/server.key.alt
sudo mv /opt/bitnami/apache2/conf/server.csr /opt/bitnami/apache2/conf/server.csr.alt

Dann erzeugen wir die benötigten Symlinks mit:

sudo ln -s /etc/letsencrypt/live/$DOMAIN/privkey.pem /opt/bitnami/apache2/conf/server.key
sudo ln -s /etc/letsencrypt/live/$DOMAIN/fullchain.pem /opt/bitnami/apache2/conf/server.crt

Danach kann man die oben gestoppten Services wieder starten:

sudo /opt/bitnami/ctlscript.sh start

SSL-Zertifikate in Wordpress integrieren

Die Host-seitigen Anpassungen sind damit erledigt. Jetzt muss man nur noch die auf dem Webserver betriebene Anwendung – im Beispiel Wordpress – für die Verwendung der neuen Zertifikate konfigurieren. Hierzu installieren wir z. B. das „Really Simple SSL-Plug-in“ in Wordpress und integrieren dann das SSL-Zertifikat.

Bevor das Wordpress-Plug-in installiert werden kann, müssen wir Schreibrechte auf die Datei wp-config.php geben.
Bevor das Wordpress-Plug-in installiert werden kann, müssen wir Schreibrechte auf die Datei wp-config.php geben.
(Bild: Drilling / AWS)

Der Vorteil des Plug-ins besteht darin, dass Really Simple SSL auch gleich die benötigte Umleitung von HTTP zu HTTPS einrichtet. Damit ist sichergestellt, dass Website-Besucher immer auf HTTPS-Verbindung geführt werden. Vor dem Installieren des Wordpress-Plug-ins muss allerdings die Datei wp-config.php beschreibbar gemacht werden, denn das Really Simple SSL-Plug-in schreibt darin, um die Zertifikate zu konfigurieren.

sudo chmod 666 /opt/bitnami/apps/wordpress/htdocs/wp-config.php

Dann kann das Really Simple SSL-Plug-in installiert werden.

Fehlt nur noch der finale Schritt, SSL zu aktivieren.
Fehlt nur noch der finale Schritt, SSL zu aktivieren.
(Bild: Drilling / AWS)

Danach muss man nur noch auf den Button „Auf geht´s, aktiviere SSL!“ klicken. Dies wird bestätigt mit „SSL aktiviert“.

Dabei wird man zwangsläufig einmal zur Neuanmeldung gezwungen. Die Wordpress-Instanz auf Lightsail ist damit befähigt, die SSL-Verschlüsselung zu verwenden. Außerdem ist sie jetzt so konfiguriert, dass http-Verbindungen bzw. -Anfragen automatisch zu https umgeleitet werden.

(ID:46496431)