pd-admin – Lets Encrypt Zertifikat für Hostname + Mail-Dienste

In der Regel werden in pd-admin nur Lets Encrypt Zertifikate für Domains und Sub-Domains der Endkunden ausgestellt. Administratoren können jedoch auch ein Lets Encrypt Zertifikat für den Hostnamen ausstellen lassen. Das Zertifikat kann dann für die Mail-Dienste, Dovecot und qmail, verwenden werden. Dazu gehen Sie wie folgt vor:

Lets Encrypt Zertifikat für Hostname ausstellen

Im ersten Schritt kommt die Einrichtung eines Lets Encrypt Zertifikats für den Hostnamen. Hierfür führen Sie folgende Befehle aus:

$ /opt/pdadmin/bin/letsencrypt server.example.net
$ /opt/pdadmin/bin/httpd_vhosts.pl

Bitte server.example.net durch den eigene Hostnamen ersetzen. Damit sind unter Anderem die pd-admin Login Seiten nun per HTTPS erreichbar.

Zertifikat bei Mail-Diensten einrichten

Für die Einrichtung eines SSL-Zertifikats bei (u.a.) den Mail-Diensten, wird von den pd-admin Entwicklern ein entsprechendes Installationsskript zur Verfügung gestellt. Dieses können Sie unter http://download.pd-admin.de/dc-ssl-install.sh herunter laden.

$ wget http://download.pd-admin.de/dc-ssl-install.sh
$ ./dc-ssl-install.sh

Nach Ausführung ist das Lets Encrypt Zertifikat bei den Mail-Diensten eingerichtet. Das Skript richtet das SSL-Zertifikat aber auch für den FTP-Dienst proFTPD ein.

Anpassung der Apache Templates

Der certbot hinterlegt die Datei zur Validierung unter /usr/local/pd-admin2/htdocs/.well-known/acme-challenge. Nachd Einrichtung des SSL-Zertifikat für den Hostnamen, werden sämtliche Anfragen auf HTTPS weiter geleitet. Dies macht soweit Sinn. Allerdings kann der certbot die Validierungsdatei nicht per HTTPS abrufen. Es käme somit zu einem Fehler bei Verlängerung des Zertifikats. Die Apache Templates müssen dazu angepasst werden. Je nachdem welche Apache Version verwendet wird, finden Sie die Templates hier:

Apache 2.2:
/usr/local/pd-admin2/conf/httpd.conf-template

Apache 2.4:
/usr/local/pd-admin2/httpd-2.4/conf/httpd24.conf-template

Sie ersetzen dort einfach die Zeile

## REDIRECT_TO_HTTPS ##

durch

RedirectMatch ^(?!/\.well-known/acme-challenge).* https://$$SERVERNAME$0

Es werden weiterhin sämtliche Anfragen auf HTTPS weitergeleitet. Mit Ausnahme von Anfragen auf /.well-known/acme-challenge. Der Apache ist für die Verlängerung des Hostname Zertifikats vorbereitet.

Cronjob einrichten

Standardmäßig wird für die Verlängerung der Lets Encrypt Zertifikate einmal pro Woche der certbot ausgeführt. Dies könnte im crontab etwa so aussehen:

00 3 * * 2 /opt/pdadmin/bin/certbot-auto renew

Damit nun SSL-Zertifikate verlängert und direkt bei den Mail-Diensten eingerichtet werden, wird dies mittels eines einfach Shell Skripts durchgeführt. Dies kann z.B. unter /root/certbot-renew.sh hinterlegt werden.

#!/bin/bash

H=`/opt/pdadmin/bin/hostname.pl`

set -x

/opt/pdadmin/bin/certbot-auto renew

cat /opt/pdadmin/sslcerts/$H-key /opt/pdadmin/sslcerts/$H-cert /opt/pdadmin/sslcerts/$H-cacert > /var/qmail/control/servercert.pem
cat /opt/pdadmin/sslcerts/$H-key /opt/pdadmin/sslcerts/$H-cert > /usr/local/pd-admin2/share/imapd.pem
cat /opt/pdadmin/sslcerts/$H-cacert > /usr/local/pd-admin2/share/imapd.cacert
cat /opt/pdadmin/sslcerts/$H-cacert > /etc/ssl/cert.pem
/usr/local/bin/svc -du /service/dovecot22/
/opt/pdadmin/bin/httpd_vhosts.pl

Das Skript ist im Grunde eine abgespeckte Version des dc-ssl-install.sh Skripts. Zum Schluss wird der Cronjob angelegt.

00 3 * * 2 /root/certbot-renew.sh

Durch das setzen von set -x im Skript werden ausgeführte Kommandos ausgegeben. Dies kann dann in eine Log Datei geschrieben werden.

00 3 * * 2 /root/certbot-renew.sh &>> /var/log/certbot-renew.log

Die Einrichtung eines Lets Encrypt Zertifikats für den Hostnamen, sowie den Mail-Diensten, Dovecot und qmail, ist abgeschlossen.

6 Gedanken zu “pd-admin – Lets Encrypt Zertifikat für Hostname + Mail-Dienste

  1. WOW, ich habe es geschafft!

    Also, wenn der certbot-auto einmal gelaufen ist und die virtuelle Umgebung für Let’s Encrypt erstellt hat, dann läuft auch der nachfolgende Befehl durch. Nur den Parameter -webroot mag er nicht, hier war Handarbeit angesagt.
    Und die Symlinks sitzen jetzt auch richtig, für die cacert habe ich die „fullchain“ verwendet.

    Gruß,
    Philipp

    • Cajus schreibt:

      Das freut mich! 🙂

      Wenn der certbot nicht über yum installiert wird, sind zunächst auch keine Binaries und Konfigurationen vorhanden. pd-admin liefert nur die certbot-auto Binary mit, welche man auch unter https://dl.eff.org/certbot-auto herunterladen kann. Bei der ersten Ausführung von /opt/padmin/bin/certbot-auto wird dann eine Installation vorgenommen.

      Sie haben in den Kommentaren -webroot angegeben. Der Parameter muss jedoch mit doppeltem Minus (-) angegeben werden. So wie in der Doku zu sehen: https://certbot.eff.org/docs/using.html#webroot

  2. Aha! Ich komme weiter:
    ich habe jetzt /opt/pdadmin/bin/certbot-auto einmal aufgerufen und er hat hat jede Menge Dinge aus dem centos-Repo nahcgeladen und installiert.
    Ich habe jetzt eine Verzeichnis /etc/letsencrypt, das ist schon mal gut.
    Unter /opt/eff-org/certbot/venv/bin finde ich auch den certbot, das gab es vorher nicht.

    wenn ich jetzt den certbot aufrufe, gibt es folgende Fehelrmeldung:
    certbot: error: unrecognized arguments: –webroot

    Ich weiß nicht weiter.
    Gruß,
    Philipp

  3. Meinst du certbot-auto?
    Das mit den symlinks verstehe ich auch ncht ganz:

    Sollen die dann so aussehen:

    ln -s /etc/letsencrypt/live/host.domain.tld /opt/pdadmin/sslcerts/host.domain.tld-key
    usw.

    Ich habe aber kein /etc/letsencrypt auf meinem System.

    Gruß,
    Philipp

    • Cajus schreibt:

      Ein paar mehr Details wären hilfreich.

      Ich vermute aber Mal es wird /opt/pd-admin/bin/letsencrypt verwendet, um für den Hostnamen ein Zertifikat zur erstellen?
      Dies funktioniert leider seit einiger Zeit nicht mehr. Diese Anleitung muss ich bei Gelegenheit noch überarbeiten.

      Das Zertifikat muss einmal manuell per certbot erstellt werden. Dies sieht so aus:

      certbot certonly --webroot -w /usr/local/pd-admin2/htdocs -d hostname.server.tld

      hostname.server.tld wird durch den pd-admin Hostnamen ersetzt.

      Anschließend werden Symlinks von /etc/letsencrypt/live/hostname.server.tld/ nach /opt/pdadmin/sslcerts/ erstellt werden. Die Dateien heißen dabei dann

      /opt/pdadmin/sslcerts/hostname.server.tld-key
      /opt/pdadmin/sslcerts/hostname.server.tld-cert
      /opt/pdadmin/sslcerts/hostname.server.tld-cacert

      Anschließend dann /opt/pdadmin/bin/httpd_vhosts.pl ausführen, damit die Konfiguration neu geschrieben und geladen wird.

      Hoffe dies hilft weiter 🙂

Schreibe einen Kommentar

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