Certbot

SSL Zertifikate mit Certbot erstellen

Mit Certbot lassen sich Let’s Encrypt Zertifikate erstellen. Diese sind in aller Munde, bricht Lets Encrypt doch den potenten Markt der SSL Zertifikate auf. Let’s Encrypt stellt über seine CA kostenlos und automatisiert, SSL-Zertifikate aus. Diese Anleitung hat zum Ziel, die eigene Webseite mit einem SSL-Zertifikat zu versehen und den Besuchern selbiger damit eine gesicherte Verbindung zu ermöglichen. Der Vollständigkeit halber sei noch erwähnt, dass nicht alle Verfahren zur Einbindung erörtert werden. Vielmehr das Verfahren, das in eigenen Projekten zum Einsatz kommt.

Let’s Encrypt is a free, automated, and open certificate authority (CA), run for the public’s benefit. Let’s Encrypt is a service provided by the Internet Security Research Group (ISRG).

Was ist Lets Encrypt?

Let’s Encrypt ist eine Certification Authority die SSL-Zertifikate ausstellt. Damit wird nicht Lets Encrypt eingebunden, sondern deren SSL-Zertifikate. Das an sich ist nichts besonderes – Informationen rund um die Einbindung von SSL in gängige Webserver (Apache, Nginx etc.) sind im Internet schnell ergoogelt. Zur Besonderheit wird die Automatisierung dieses Vorgangs. Notwendig ist dazu ein ACME-Client. Wer sich für ACME (Automatic Certificate Management Environment) interessiert, der findet auf Github weitere Informationen dazu.

Certbot

Certbot Logo

Der offizielle ACME Client ist certbot. Auf der Webseite werden alle Informationen dokumentiert die für die Nutzung notwendig sind. U.a. auch die Plugins für den Apache Webserver. Die Installation des Clients wird auf der Startseite beschrieben. Man selektiert dazu den Webserver-Typ und das Betriebssystem und erhält dann spezifische Anweisungen. Prinzipiell ist es empfehlenswert auf Distributions-Pakete zurückzugreifen, falls vorhanden.

Allgemein gehalten soll in dieser Anleitung aber mit dem heruntergeladenen Client gearbeitet werden. Nachfolgende Befehle an der Shell ausgeführt, machen den Server einsatzbereit.

mkdir /opt/certbot
cd /opt/certbot
wget https://dl.eff.org/certbot-auto
chmod a+x certbot-auto

Plugin: Apache 2

Cerbot hat ein Apache 2 Plugin. Damit lassen sich die Zertifikatsanfragen für den Apachen stellen und der Server auch gleich noch konfigurieren. Certbot nimmt dazu den Parameter –apache an. Ein Aufruf könnte somit lauten:

/opt/certbot/certbot-auto --apache \
   -d www.beispiel-domain.tld,beispiel-domain.tld

Das Plugin führt den Benutzer dabei komplett durch den Prozess; startet den Webserver im Bedarfsfall auch neu.

Update: Zertifikat erweitern

Ein bestehendes Zertifikat kann man mit dem Flag –expand um weitere Domains erweitern.

/opt/certbot/certbot-auto --apache --expand \
-d www.beispiel.tld,beispiel.tld,ftp.beispiel.tld,www2.beispiel.tld

Nginx

An einem Plugin für Nginx wird noch gearbeitet (Stand Anleitung). Um hier schnell ans Ziel zukommen kann entweder das „Webroot“-Plugin verwendet werden, oder der Dienst an Port 80 kurzzeitig ausgesetzt werden.

/opt/certbot/certbot-auto certonly --standalone \
   -d www.beispiel-domain.tld --pre-hook="systemctl stop nginx" \
   --post-hook="systemctl start nginx"

Die Übergabe von –pre-hook und –post-hook ermöglicht das Neustarten des Webserver-Prozesses. Das Beispiel nutzt dabei systemd zum Stoppen und Starten von Nginx. Dies könnte auf anderen Linux Derivaten auch service nginx stop/start sein.

Die Konfiguration des Nginx nach erfolgreicher Erstellung eines Zertifikats könnte so aussehen:

server {
   listen 80;
   listen [::]:80
   server_name www.beispiel-domain.tld;
   # No more 80 -- all to 443
   return 301 https://www.beispiel-domain.tld$request_uri;
}

server {
   listen 443 ssl http2;
   listen [::]:443 ssl http2;
   server_name www.beispiel-domain.tld;

   # further details 1) & 2)
   ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
   ssl_prefer_server_ciphers on;
   ssl_ciphers "EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH";
   ssl_ecdh_curve secp384r1;
   ssl_session_cache shared:SSL:10m;
   ssl_session_tickets off;
   ssl_stapling on;
   ssl_stapling_verify on;
   resolver 8.8.8.8 8.8.4.4 valid=300s;
   resolver_timeout 5s;
   add_header Strict-Transport-Security "max-age=63072000; includeSubdomains; preload";
   add_header X-Frame-Options DENY;
   add_header X-Content-Type-Options nosniff;

   ssl_dhparam /etc/ssl/certs/dhparam.pem;

   # LE -->
   ssl_certificate /etc/letsencrypt/live/www.beispiel-domain.tld/fullchain.pem;
   ssl_certificate_key /etc/letsencrypt/live/www.beispiel-domain.tld/privkey.pem;

   # ... [further options]

 }

Plugin: Webroot

Das Webroot-Plugin richtet sich an alle die, die Zugriff auf das Webroot-Verzeichnis haben. Dazu wird dem Client, unter Angabe des Parameters –webroot-path=/path/to/e.g.-nginx/docroot signalisiert, dass er in einem Verzeichnis /.well-known/ ein Unterverzeichnis (acme-challenge/) und Dateien ablegen darf/kann. Von Seiten der CA wird auf diese Dateien zugegriffen und damit signalisiert, dass man eine legitime Anfrage stellt. Ähnlich dem was man zur Legitimation von Google im Webroot macht.

/opt/certbot/certbot-auto --certonly --webroot-path=/var/www/html/ \
   -d www.beispiel-domain.tld -d beispiel-domain.tld

Die Einbindung des Zertifikats wird hier aber nicht automatisiert, der Webserver muss also die Konfiguration neu laden. Wenn bislang noch kein SSL geladen wurde benötigt der Webserver einen Neustart.

Erneuerung der Zertifikate

LE stellt Zertifikate mit einer Gültigkeit von 90 Tagen aus. Daher ist die Erneuereung das was die Automatisierung komplettiert. Mit einem Cronjob kann dies wie folgt geschehen

/opt/certbot/certbot-auto renew

Als Cronjob verpackt:

1 3,23 * * * /opt/certbot/certbot-auto renew >> /var/log/letsencrypt-renew.log

Weiterführende Informationen

Wurden bislang noch keine Seiten unter SSL zur Verfügung gestellt, dann muss darauf geachtet werden, dass der Webserver auch SSL unterstützt. Ergo alle passenden Module laden! Wer seine Seite im Anschluß testen möchte, der kann dies z.B. unter https://www.ssllabs.com/ssltest/analyze.html tun.

1) https://cipherli.st/
2) https://raymii.org/s/tutorials/Strong_SSL_Security_On_nginx.html


Beitrag veröffentlicht

in

, , , ,

von

Schlagwörter:

Kommentare

3 Antworten zu „SSL Zertifikate mit Certbot erstellen“

  1. […] installiert wird um das Zertifikat für den Apachen zu holen. Beschrieben wurde dies bereits im letzten Tutorial (siehe Abschnitt Plugin: […]

  2. […] Wenn die Konfiguration von Nginx steht, kann für die Generierung der Zertifikate folgender Befehl verwendet werden. Die einzelnen Parameter sind dabei u.a. von den Domains und dem Betriebssystem abhängig. Jeder Domain für die das SSL-Zertifikat verwendet werden soll, wird mit vorangestelltem -d hinzugefügt. Der Befehl innerhalb der Schalter –pre-hook und –post-hook hängt com Betriebssystem ab. Weitere Informationen stehen in einem eigenen Tutorial zur Verfügung. […]

  3. Funktioniert im Übrigen genauso, wenn man certbot-auto renew aufruft. Der –post-hook und –pre-hook Parameter ist wichtig, da sonst ein Port Bind Error kommt.

Schreibe einen Kommentar