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.

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.
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.
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 …
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
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.
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.
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>
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.
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.
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.
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)