Inhaltsverzeichnis
Let's Encrypt einrichten
Voraussetzung
- Dieses Howto setzt ejabberd Installation voraus.
Einleitung
Damit beim Login keine Zertifikatsfehler mehr auftreten, ist es sinnvoll ein eigenes Zertifikat zu verwenden. Diese gibt es kostenlos über Let's Encrypt. ejabberd bringt einen eigenen Client dafür mit, hat aber den Nachteil, dass Port 80 (dieser wird für Let's Encrypt benötigt) auf einen von ejabberd verwendeten Port umgeleitet werden muss. Das ist nicht wirklich praktisch und verhindert z.B. den Betrieb eines Webservers auf dem gleichen Server. Deswegen verwenden wir den Client aus der Debianinstallation.
Einrichtung
Let's Encrypt und benötigte Pakete installieren:
$ apt install certbot sudo
Zertifikat generieren:
$ certbot certonly -d <beispiel.de> --standalone
Damit wird ein Zertifikat für <beispiel.de> generiert. Du wirst noch nach deiner E-Mail Adresse gefragt, über die du kontaktiert wirst, wenn dein Zertifikat abläuft. Grundsätzlich findet aber eine automatische Erneuerung statt.
Damit ejabberd von der Erneuerung erfährt, richten wir ein automatisches Script ein:
$ mkdir /opt/scripts $ jed /opt/scripts/ejabberd_script.sh
und füllen es mit folgendem Inhalt:
#!/bin/bash CAT="$(which cat)" EJABBERDUSER="ejabberd" EJABBERDCTL="/home/ejabberd/opt/ejd/bin/ejabberdctl" PRIVKEY="/etc/letsencrypt/live/<beispiel.de>/privkey.pem" CERT="/etc/letsencrypt/live/<beispiel.de>/cert.pem" CHAIN="/etc/letsencrypt/live/<beispiel.de>/chain.pem" COMBINED="/home/ejabberd/certs/certs.pem" $CAT $PRIVKEY > $COMBINED $CAT $CERT >> $COMBINED $CAT $CHAIN >> $COMBINED $SUDO -u $EJABBERDUSER $EJABBERDCTL reload_config
Die Änderungen mit [STRG] + [x] und [STRG] + [s] speichern und den Editor mit [STRG] + [x] und [STRG] + [c] verlassen.
Die Datei ausführbar machen:
$ chmod +x /opt/scripts/ejabberd_script.sh
Für das Script richten wir einen Cronjob ein, sodass das Script jeden Montag um Mitternacht ausgeführt wird:
$ jed /etc/crontab
Folgende Zeile am Ende einfügen:
0 0 * * 1 root /opt/scripts/ejabberd_script.sh 2>&1
Mit [Enter] eine leere Zeile am Ende der Datei einfügen. Die Änderungen mit [STRG] + [x] und [STRG] + [s] speichern und den Editor mit [STRG] + [x] und [STRG] + [c] verlassen.
Als Benutzer ejabberd weiterarbeiten:
$ su - ejabberd $ mkdir certs $ exit
Das Script einmalig ausführen, damit das Zertifikat erstmalig in das neue Verzeichnis kopiert wird:
$ /opt/scripts/ejabberd_script.sh
Weiter als ejabbberd und die Konfiguration anpassen:
$ su - ejabberd $ jed opt/ejabberd/conf/ejabberd.yml
Suche nach:
ca_file: /home/christoph/opt/ejabberd/conf/cacert.pem certfiles: - /home/christoph/opt/ejabberd/conf/server.pem ## If you already have certificates, list them here # certfiles: # - /etc/letsencrypt/live/domain.tld/fullchain.pem # - /etc/letsencrypt/live/domain.tld/privkey.pem
passe den Abschnitt certfiles an und lösche den Rest:
certfiles: - "/home/ejabberd/certs/certs.pem"
Die Änderungen mit [STRG] + [x] und [STRG] + [s] speichern und den Editor mit [STRG] + [x] und [STRG] + [c] verlassen.
Mache ejabberd die geänderte Konfiguration bekannt:
$ ./opt/ejd/bin/ejabberdctl reload_config