Let’s Encrypt SSL Zertifikate mit Certbot erstellen

Mit dem Certbot kann man Zertifikate von Let’s Encrypt erstellen und automatisch auf dem Server installieren. Die Zertifikate sind kostenlos. Sie sind zwar nur 90 Tage gültig, aber dank Certbot werden diese vor Ablauf automatisch aktualisiert.

Die Installation & Konfiguration geht total schnell. Einmal eingerichtet, darf man dank dem auto-renew alles drum herum einfach vergessen. So einfach war’s bis jetzt noch nie 🙂

Installation unter FreeBSD mit NGINX

pkg install py27-certbot

Konfiguration

Es existiert aktuell noch kein eigenes Plugin für Nginx. Und ich möchte eigentlich auch nicht, dass der Client an der Nginx Config herumbastelt. Daher nutze ich den certonly Befehl mit dem Webroot Plugin. Dieses Plugin erstellt in einem Verzeichnis auf dem öffentlich zugänglichen Web eine Datei, welches bei der Zertifizierung beweist, dass die Domain unter unserer Kontrolle ist (ähnlich der Google Legimitation).

Als erstes erstellen wir die Verzeichnisse

mkdir /global/configs/letsencrypt/
mkdir /global/configs/letsencrypt_data/

Da ich die Configs auf einer global Verfügbaren Festplatte verwalte, auf die mehrere Server zugreifen, kommen die Zertifikate dann dort drauf:

ln -s /global/configs/letsencrypt_data/ /usr/local/etc/letsencrypt

Ich nutze eine globals.server Config, die ich bei jedem Virtual Host include. Dort kommt nun folgendes rein:

vi /global/nginx_global_config/globals.server
        # let's encrypt config
        location ^~ /.well-known {
auth_basic "off";
                allow all;
                root /global/configs/letsencrypt;
        }

Falls noch weitere Globale Config Files vorhanden sind, die statt globals.server included werden, dort ebenfalls die Zeilen rein machen.

vi /global/nginx_global_config/globals.serverLongTimeout

Webserver neu starten:

nxctl restart

So ist das globale Verzeichnis nun für alle Virtual Hosts dieses Webservers unter domain.ltd/.lets-encrypt erreichbar.

Nun Zertifikat anfordern

Einzelnes Zertifikat

certbot certonly --webroot -w /global/configs/letsencrypt -d www.teslina.com

Man kann auch gleich mehrere Domains in einem Zertifikat auf einmal anlegen

certbot certonly --webroot -w /global/configs/letsencrypt -d www.domain.com -d www2.domain.com -d www3.domain.com

so werden alle weiteren Domains in einem einzigen Zertifikat zusammengestellt. Man macht hier aber jeweils am Besten immer nur diese Domains zusammen, die auch zusammen gehören. Denn das Zertifikat listet dann unter “Ausgestellt für” -> “Allgemeiner Name (CN)” den ersten Domain in der Liste auf. Im oberen Beispiel also www.domain.com

 

Nun muss man einige Fragen beantworten, danach wird das Cert generiert:

Saving debug log to /var/log/letsencrypt/letsencrypt.log
Starting new HTTPS connection (1): acme-v01.api.letsencrypt.org
Obtaining a new certificate
Performing the following challenges:
http-01 challenge for www.teslina.com
Using the webroot path /global/configs/letsencrypt for all unmatched domains.
Waiting for verification...
Cleaning up challenges
Generating key (2048 bits): /usr/local/etc/letsencrypt/keys/0000_key-certbot.pem
Creating CSR: /usr/local/etc/letsencrypt/csr/0000_csr-certbot.pem

IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at
   /usr/local/etc/letsencrypt/live/www.teslina.com/fullchain.pem. Your
   cert will expire on 2017-08-02. 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

Jetzt noch die Zertifikate im Config angeben (ich verweise hier auf meinen globalen Speicherort, ansonsten wäre es natürlich unter /usr/local/etc/[..].) und Webserver neu starten:

   server {
            listen       80;
            listen       [::]:80;
            server_name  teslina.com www.teslina.com;
            return       301 https://www.teslina.com$request_uri;
    }

    server {
        listen       443 ssl http2;
        listen       [::]:443 ssl http2;
        server_name  www.teslina.com;
        ssl on;
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        ssl_certificate /global/configs/letsencrypt_data/live/www.teslina.com/fullchain.pem;
        ssl_certificate_key /global/configs/letsencrypt_data/live/www.teslina.com/privkey.pem;

       [..]

     }

Zertifikate automatisch erneuern

Den Script um die Zertifikate zu erneuern, sollte man zur Sicherheit 2x täglich laufen lassen. Die Zertifikate werden nur dann erneuert, wenn sie kurz vor Ablauf stehen.

crontab -e

und folgende Zeile hinzufügen

0       */12    *       *       *       /usr/local/bin/certbot renew --renew-hook "/usr/local/etc/rc.d/nginx reload" > /dev/null 2>&1

So werden Zertifikate bei Bedarf automatisch erneuert und – sofern etwas erneuert wurde – auch nginx automatisch gereloaded.

Zertifikate löschen

Benötigt man gewisse Zertifikate nicht mehr, kann man sie einfach löschen mit:

certbot delete

Bestehende Zertifikate auflisten

certbot certificates

Bestehendes Zertifikat ergänzen

Manchmal kommt eine weitere Subdomain dazu. Man könnte einfach ein neues Zertifikat anfordern oder aber die Domain per –expand hinzufügen:

certbot certonly --webroot --cert-name www.domain.com -w /global/configs/letsencrypt --expand -d www.domain.com -d www2.domain.com -d www3.domain.com -d www4.domain.com

Bitte beachte: Man muss ALLE Domains erneut auflisten, sonst werden sie aus dem Zertifikat gelöscht.

bei –cert-name gibt man den Namen des zu ergänzenden Zertifikates an (Namen kann man mit certbot certificates anzeigen)

 

Go to Top