Let’s Encrypt macht SSL einfach – Anleitung zur Installation von Let’s Encrypt und certbot mit nginx (und WordPress)

Auch für private Betreiber von Blogs kann die Verschlüsselung der eigenen Webseite mit SSL sinnvoll sein. Denn die normale http-Verbindung entspricht praktisch einer Postkarte. Jeder, der die Datenpakete auf dem Weg in die “Hände” bekommt, kann (theoretisch) mitlesen. Übrigens ganz gleich, ob der Leser eine Seite abruft oder bei Euch kommentiert bzw. das Kontaktformular ausfüllt. Mit der Nutzung von SSL lässt sich das Mitlesen zumindest etwas erschweren.

Doch bisher war die Beantragung und Einrichtung von SSL durchaus komplex. Denn zunächst müssen ein geheimer Schlüssel (Key) und ein Certificate Signing Request (CSR) erzeugt werden. Dieser CSR muss dann zum Signieren an eine Zertifizierungsstelle (certification authority) übergeben werden.  Anschließend sind der Key und das signierte Zertifikat auch noch in den eigenen Webserver (Apache oder nginx) einzubinden. Und da die Zertifikate aus Sicherheitsgründen nur eine begrenzte Laufzeit haben, ist das “Spiel” anschließend regelmäßig zu wiederholen.

Let’s Encrypt will SSL zum Standard machen

Mit der Initiative Let’s Encrypt (“Lasst uns verschlüsseln”) gibt es eine Möglichkeit, das Ganze deutlich zu vereinfachen. Denn Let’s Encrypt will die SSL-Verschlüsselung von Webseiten zum Standard machen. Hinter dem Projekt steht die gemeinnützige Internet Security Research Group (ISRG). Beteiligt sind Sponsoren und Unterstützer wie die Electronic Frontier Foundation (EFF), die Mozilla Foundation, Akamai, Cisco Systems, die Zertifizierungsstelle IdenTrust, die University of Michigan (U-M), die Stanford Law School, die Linux Foundation. Gemeinsam haben sie das Verfahren zur Ausstellung und Erneuerung von SSL-Zertifikaten deutlich vereinfacht.

Auch Let’s Encrypt stellt ganz normale X.509-Zertifikate aus. Das Besondere ist der hohe Automatisierungsgrad. Denn mit seinem Programm certbot führt Euch Let’s Encrypt ziemlich komfortabel durch den Prozess der Erstellung eines Zertifikats. Dazu legt certbot einen zusätzlichen Schlüssel temporär in das Root-Verzeichnis Eures Webservers. Let’s Encrypt ruft diesen Schlüssel auf und signiert, wenn der Zugriff auf die Testdatei funktioniert, Euer neues Zertifikat. So einfach kann SSL sein! Das Programm certbot findet Ihr auf dieser Webseite. Dort bitte einfach Euren Webserver und Eurer Betriebssystem auswählen. Anschließend folgt Ihr der Installationsanleitung. Dann kann eigentlich nichts falsch laufen.

Wir bekomme ich ein Zertifikat von Let’s Encrypt?

Der einfachste Weg ist, der Aufruf mit dem Statement:

$ certbot certonly

Anschließend fragt Euch das Programm, was es wissen muss.

Saving debug log to /var/log/letsencrypt/letsencrypt.log

How would you like to authenticate with the ACME CA?
-------------------------------------------------------------------------------
1: Place files in webroot directory (webroot)
2: Spin up a temporary webserver (standalone)
-------------------------------------------------------------------------------
Select the appropriate number [1-2] then [enter] (press 'c' to cancel):

Hier gebt Ihr die 1 an, um das Zertifikat im laufenden Betrieb zu erstellen. Alternativ ist auch möglich, dass service nginx restart temporär einen Webserver startet. Voraussetzung dafür, dass das funktioniert ist, dass Ihr einen ggf. bereits laufenden Webserver abschaltet. Das war für mich keine Alternative.

Starting new HTTPS connection (1): acme-v01.api.letsencrypt.org
Please enter in your domain name(s) (comma and/or space separated)  (Enter 'c'
to cancel):

Im zweiten Schritt fragt service nginx restart Euch, für welche Domains Ihr ein Zertifikat erstellen möchtet. Im Regelfall gebt Ihr hier Eure Domain einmal mit www. und einmal ohne www an. Damit stellt ihr sicher, das Eure Besucher auch beim Umleiten von der einen zur anderen Adresse keine Zertifikatswarnung erhalten.

Obtaining a new certificate
Performing the following challenges:
http-01 challenge for example.com
http-01 challenge for www.example.com

Select the webroot for doctor-speed.de:
-------------------------------------------------------------------------------
1: Enter a new webroot
-------------------------------------------------------------------------------
Press 1 [enter] to confirm the selection (press 'c' to cancel):

Anschließend will certbot wissen, wo er die Prüfdatei für Let’s Encrypt ablegen soll. Dazu drückt Ihr wieder die 1 und gebt anschließend den Pfad zu Eurem Webserver an.

Input the webroot for example.com: (Enter 'c' to cancel):/var/www/wordpress

Select the webroot for www.example.com:
-------------------------------------------------------------------------------
1: Enter a new webroot
2: /var/www/wordpress
-------------------------------------------------------------------------------
Select the appropriate number [1-2] then [enter] (press 'c' to cancel):

Anschließend müsste Ihr das für alle weiteren Domains wiederholen. Wobei Ihr in der Regel einfach die vorherige Eingabe mit 2 übernehmen könnt. Vorausgesetzt natürlich, dass Eurer Webserver die unterschiedlichen Domains, für die Ihr ein Zertifikat erstellen wollt, aus dem gleichen Verzeichnis heraus bedient. Sobald Ihr für alle Domains das Webroot-Verzeichnis angegeben habt, geht es weiter.

Waiting for verification...
Cleaning up challenges
Generating key (2048 bits): /etc/letsencrypt/live/example.com/privkey.pem
Creating CSR: /etc/letsencrypt/csr/example.com.pem

IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at
   /etc/letsencrypt/live/example.com/fullchain.pem. Your cert will expire on 2017-07-21. To obtain a new or tweaked version of this certificate in the future, simply run certbot again. To non-interactively renew *all* of your certificates, run "certbot renew" - If you like Certbot, please consider supporting our work by: Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate Donating to EFF: https://eff.org/donate-le

Wobei dieser Schritt nach der Ausgabe von Waiting for verification… immer etwas dauert. Denn jetzt erzeugt Euer Webserver den Key und sendet den CSR ab. Anschließend prüft Let’s Encrypt die Anforderung und erstellt – nach einer positiven Prüfung – das Zertifikat. Abweichend von der tatsächlichen Ausgabe habe ich hier mal zwei Angaben fett gesetzt. Diese Infos benötigt Ihr später, um das Zertifikat auch in Eurem Webserver (s.u.) einzubinden.

Das geht übrigens auch auf der Kommandozeile

Kommandozeilen-Fetischichten können übrigens gleich die notwendigen Parameter an den Aufruf dranhängen. Das sieht dann wie folgt aus:

$ certbot certonly --webroot -w /var/www/wordpress -d example.com -d www.example.com

Die Parameter sind schnell erklärt:

  • -w ist der Pfad zum Webroot Eures Webservers
  • -d gibt die Domains an für die Ihr ein Zertifikat erstellen wollt. Das können übrigens mehrere sein. Voraussetzung ist nur, dass Let’s Encrypt die Domains auch erreichen kann.

Einbinden der Let’s Encrypt Zertifikate in den Webserver am Beispiel von nginx

Die Zertifikate von Let’s Encrypt sind ganz normale X.509-Zertifikate. Die Einbindung erfolgt genauso wie bei kommerziellen Zertifikaten. Im Fall von nginx sieht das bei mir im Prinzip so aus:

server {
# http-Zugriffe auf https umlenken
    listen 80;
    server_name example.com www.example.com;
    rewrite ^ https://www.example.com$request_uri permanent;
    access_log    off;
    error_log     off;
}

server {
# die https-Zugriffe beantworten

    # Welcher Server?
    server_name example.com www.example.com;

    # SSL aktivieren ...
    ssl on;
    listen 443 ssl;
    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
    ssl_protocols TLSv1.2 TLSv1.1 TLSv1;
    ssl_dhparam /etc/nginx/ssl/dhparam.pem;

    # Umleiten auf www.example.com
    if ($http_host != "www.example.com") {
        return 301 https://www.example.com$request_uri;
    }

    # Wo liegen die Dateien des Webservers?
    root /var/www/wordpress;
    index index.php index.html index.htm;

    # Protokollierung
    access_log off;
    error_log /var/log/nginx/wpms-error.log;

    # Böse Buben bleiben vor der Tür ...
    include blacklist.conf;

    # PHP und WordPress aktivieren ...
    include wordpress.conf;

    ...
}

Achtung! Diese Zeilen sind nur ein Auszug aus meiner .conf-Datei. Natürlich müsst Ihr das für Euren Webserver passend machen. Danach könnt Ihr den Webserver wieder mit service nginx restart durchstarten und dann habt Ihr fertig. Zumindest für die nächsten 90 Tage. Denn länger sind die Zertifikate von  Let’s Encrypt (bisher) nicht.

Automatische Erneuerung der Zertifikate mit cron

Aber auch diese zeitliche Beschränkung kein großes Problem. Denn certbot kann die Zertifikate selbständig erneuern. Dazu ergänzt Ihr einfach Eure crontab um den passenden Aufruf und startet anschließend cron einmal mit service cron restart einmal durch.

41 */12 * * * root   /usr/bin/certbot renew

Let’s Encrypt empfiehlt, das zweimal am Tag einzurichten (*/12) und Euch den Minutenwert (bei mir 41) auszusuchen. Daher sucht Ihr Euch an dieser Stelle einfach eine beliebige Minute aus, um die Last bei Let’s Encrypt zu verteilen. Und dann seit Ihr tatsächlich fertig. Jetzt läuft bei Euch ein Zertifikat von Let’s Encrypt auch in Verbindung mit WordPress.

Kommentar (1)

  1. Pinkback: Let's Encrypt für WordPress ohne PlugIn nutzen - ruhrmentar

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert