Prosody mit Lets Encrypt

Published on 2018-06-02 by Malte

Dieser Artikel ist auf Wunsch von intux entstanden.

Im folgenden Artikel möchte ich darauf eingehen, wie man Prosody mit Let's Encrypt nutzen kann, ohne Zertifikate zu kopieren, Script zu schreiben oder die Rechte auf die Zertifikate zu ändern, damit Prosody sie lesen und nutzen kann.

Vorraussetzungen

Im Artikel gehe ich davon aus, dass ihr Prosody bereits installiert und eingerichtet habt. Zusätzlich gehe ich davon aus, dass ihr mit LE bereits für die entsprechende Domain Zertifikate angefordert habe und zwar für:

Das lässt sich sehr schön mit der DNS Überprüfung von LE lösen.

Die Zertifikate sollten in dem Ordner

/etc/letsencrypt/live/example.org/

liegen und ihr nutzt den certbot für die Erstellung eurer Zertifikate.

Prosody SSL Konfiguration

Ich werde nur ganz kurz anschneiden, wie eine "sichere" SSL Konfiguration für die Verwendung mit Prosody aussehen sollte:

c2s_require_encryption = true;
s2s_require_encryption = true;
s2s_secure_auth = true;

ssl = {
    protocol = "tlsv1_2"; 
    ciphers = "EECDH+ECDSA+AESGCM:EECDH+aRSA+AESGCM:EECDH+ECDSA+SHA384:EECDH+ECDSA+SHA256:EECDH+aRSA+SHA384:EECDH+aRSA+SHA256:EECDH:EDH+aRSA:!aNULL:!eNULL:!LOW:!3DES:!MD5:!EXP:!PSK:!SRP:!DSS:!RC4:!SEED:!AES128:!CAMELLIA128";
    options = { "no_sslv2", "no_sslv3", "no_ticket", "no_compression", "cipher_server_preference", "single_dh_use", "single_ecdh_use" };
    dhparam = "/etc/prosody/dhparam.pem";
}

Bitte keine Angaben in die Datei wo das Zertifikate liegt, wenn ihr diese bereits habt, könnt ihr diese löschen.

Die Datei /etc/prosody/dhparam.pem wird mit dem folgenden Befehl erstellt:

openssl dhparam -dsaparam -out /etc/prosody/dhparam.pem 4096

Achtung: Das dauert sehr lange, ich empfehle es mit screen zu machen.

Prosody & Let's Encrypt

So jetzt kommen wir zum eigentlichen Teil, wichtig hier, dass ihr min. Version 0.10 habt:

root@vps73846:/etc/prosody# apt-cache policy prosody
prosody:
  Installed: 0.10.1-1~stretch1
  Candidate: 0.10.1-1~stretch1
  Version table:
 *** 0.10.1-1~stretch1 500

Um die aktuelle Version unter Debian Stable (Stretch) zu bekommen, solltet ihr die Prosody Repo nutzen.

So jetzt führen wir einfach den folgenden Befehl aus:

prosodyctl --root cert import /etc/letsencrypt/live

Wichtig, nur auf den live Ordner, nicht im example.org Ordner.

Prosody erkennt automatisch die richtigen Zertifikate und konfiguriert sich dementsprechend. Das war es eigentlich auch schon. Aber nur fast.

Das Problem, die Zertifikate müssen nach jedem neu erstellen wieder eingelesen werden. Dazu nutzen wir die Möglichkeit der globalen Konfigurationsdatei von Let's Encrypt, /etc/letsencrypt/cli.ini

Der Inhalt sollte so aussehen, ja ihr müsste die Datei erst anlegen

# Global config for letsencrypt runs
#
# Note that these options apply automatically to all use of Certbot for
# obtaining or renewing certificates, so options specific to a single
# certificate on a system with several certificates should not be placed
# here.

renew-hook = prosodyctl --root cert import /etc/letsencrypt/live
post-hook = prosodyctl --root cert import /etc/letsencrypt/live

So das wars. Jetzt haben wir Prosody mit den aktuellen LE Zertifikaten ausgerüstet und auch dafür gesorgt, das es immer die aktuellen Zertifikate bekommt.