
FreePBX 17 Zertifikat mit Let's Encrypt via DNS-Challenge erneuern
Nie wieder abgelaufene Zertifikate in FreePBX – mit automatischer DNS-Challenge und sauberer Integration.
In diese Anleitung zeige ich, wie Sie unter FreePBX 17 (Debian) ein Let’s-Encrypt-Zertifikat per DNS-Challenge ausstellen, testen und automatisch in FreePBX, Apache und Asterisk integrieren könnt. Am Beispiel von OVH wird die DNS-Validierung erklärt, die sich aber auch bei anderen Providern nutzen lässt. Ideal für Systeme ohne öffentlich erreichbaren Webserver oder mit restriktiven Firewalls – so erneuern sich Zertifikate zuverlässig und automatisch.
Voraussetzungen
- FreePBX 17 auf Debian
- Root-Zugriff auf das System
- Eine Domain, die über OVH verwaltet wird
- OVH API-Zugangsdaten (Application Key, Secret, Consumer Key)
- Internetzugang für das System
Überblick über das Vorgehen
- Installation von Snap und Certbot inkl. OVH-DNS-Plugin
- Hinterlegen der OVH-API-Zugangsdaten
- Test und Ausstellung des Let’s-Encrypt-Zertifikats
- Erstellung eines Update-Skripts für FreePBX, Apache und Asterisk
- Automatische Einbindung per Certbot-Renew-Hook
- Abschließender Funktionstest
1. Installation von Snap und Certbot
Führen Sie alle folgenden Schritte als Root-Benutzer aus.
Snap installieren und vorbereiten
apt install snapd
snap install core; snap refresh core
systemctl enable --now snapd.socket
Certbot und DNS-Plugin installieren
snap install --classic certbot
snap set certbot trust-plugin-with-root=ok
snap install certbot-dns-ovh
Erstellen Sie anschließend einen Symlink, damit Certbot systemweit verfügbar ist:
ln -s /snap/bin/certbot /usr/bin/certbot
2. OVH-API-Zugangsdaten hinterlegen
Certbot benötigt Zugriff auf die OVH-API, um DNS-Einträge für die Challenge automatisch zu setzen.
Verzeichnis und Konfigurationsdatei anlegen
Erstellen Sie als Nächstes eine Datei für die Anmeldeinformationen wie folgt:
mkdir -p /root/.secrets/certbot/
nano /root/.secrets/certbot/ovh.ini
OVH-Zugangsdaten eintragen
# OVH API credentials used by Certbot
dns_ovh_endpoint = ovh-eu
dns_ovh_application_key = XXXXXXXXXXXXXXXX
dns_ovh_application_secret = XXXXXXXXXXXXXXXXXXXXXXXXXXXX
dns_ovh_consumer_key = XXXXXXXXXXXXXXXXXXXXXXXXXXXX
Dateiberechtigungen setzen
chmod 600 /root/.secrets/certbot/ovh.ini
3. DNS-Challenge testen und Zertifikat ausstellen
Funktionstest (Dry-Run)
certbot certonly \
--dns-ovh \
--dns-ovh-credentials /root/.secrets/certbot/ovh.ini \
--dns-ovh-propagation-seconds 60 \
--dry-run \
-d example.com
Wenn dieser Test erfolgreich war, kann das Zertifikat produktiv erstellt werden.
Produktives Zertifikat ausstellen
certbot certonly \
--dns-ovh \
--dns-ovh-credentials /root/.secrets/certbot/ovh.ini \
--dns-ovh-propagation-seconds 60 \
-d example.com
Optional: Staging-Zertifikat für Tests
certbot certonly \
--dns-ovh \
--dns-ovh-credentials /root/.secrets/certbot/ovh.ini \
--dns-ovh-propagation-seconds 60 \
--staging \
-d example.com
4. Zertifikats-Update-Skript für FreePBX erstellen
Damit das Zertifikat nach jeder Erneuerung automatisch in FreePBX, Apache und Asterisk übernommen wird, erstellen wir ein eigenes Skript.
Skript anlegen
mkdir -p /root/bin && nano /root/bin/freepbx-cert-update.sh
Skriptinhalt
Hinweis: Ersetzen Sie
pbx.demo.dedurch Ihre eigene Domain.
#!/bin/bash
# ---------------------------------------------------------------------------
# FreePBX 17.x + Asterisk + Apache (pki) Zertifikats-Rollout Script
# Integration mit certbot (DNS Challenge)
# ---------------------------------------------------------------------------
DOMAIN="pbx.demo.de"
LE_PATH="/etc/letsencrypt/live/$DOMAIN"
FPBX_KEY_DIR="/etc/asterisk/keys"
APACHE_PKI_DIR="/etc/apache2/pki"
FPBX_CERT_NAME="letsencrypt-$DOMAIN"
LOGFILE="/var/log/freepbx-cert-update.log"
#exec > >(tee -a "$LOGFILE") 2>&1
exec >> "$LOGFILE" 2>&1
echo "=============================="
echo "[INFO] Starte Zertifikatsupdate für $DOMAIN"
echo "Datum: $(date)"
echo "=============================="
# Check Certbot output
if [ ! -f "$LE_PATH/fullchain.pem" ] || [ ! -f "$LE_PATH/privkey.pem" ]; then
echo "[ERROR] Zertifikatsdateien fehlen im $LE_PATH"
exit 1
fi
# Backup
mkdir -p "$FPBX_KEY_DIR/backup" "$APACHE_PKI_DIR/backup"
cp -a "$FPBX_KEY_DIR"/*.pem "$FPBX_KEY_DIR/backup/" 2>/dev/null
cp -a "$APACHE_PKI_DIR"/*.crt "$APACHE_PKI_DIR"/*.key "$APACHE_PKI_DIR/backup/" 2>/dev/null
echo "[INFO] Backup abgeschlossen."
# Zertifikate für Asterisk
cp "$LE_PATH/fullchain.pem" "$FPBX_KEY_DIR/$FPBX_CERT_NAME.crt"
cp "$LE_PATH/privkey.pem" "$FPBX_KEY_DIR/$FPBX_CERT_NAME.key"
chown asterisk:asterisk $FPBX_KEY_DIR/$FPBX_CERT_NAME.*
chmod 600 $FPBX_KEY_DIR/$FPBX_CERT_NAME.*
echo "[INFO] Zertifikate für Asterisk kopiert."
# Zertifikate für Apache (FreePBX WebGUI)
cp "$LE_PATH/fullchain.pem" "$APACHE_PKI_DIR/webserver.crt"
cp "$LE_PATH/privkey.pem" "$APACHE_PKI_DIR/webserver.key"
# optional: Chain-Datei (falls vorhanden)
if [ -f "$LE_PATH/chain.pem" ]; then
cp "$LE_PATH/chain.pem" "$APACHE_PKI_DIR/webserver-ca-bundle.crt"
fi
chmod 640 $APACHE_PKI_DIR/webserver.*
chown root:root $APACHE_PKI_DIR/webserver.*
echo "[INFO] Apache-PKI-Zertifikate aktualisiert."
# Import in FreePBX und als Default setzen
fwconsole cert --import --force
fwconsole cert --default="$FPBX_CERT_NAME"
fwconsole sa ihc default
fwconsole reload
echo "[INFO] Zertifikat in FreePBX gesetzt."
# Apache & Asterisk reloaden
systemctl reload apache2 2>/dev/null || systemctl restart httpd
fwconsole restart
echo "[OK] Zertifikat erfolgreich aktualisiert & Dienste neu geladen."
exit 0
Skript ausführbar machen
chmod 750 /root/bin/freepbx-cert-update.sh
5. Automatische Erneuerung per Certbot-Hook
Öffnen Sie die Erneuerungskonfiguration Ihrer Domain:
nano /etc/letsencrypt/renewal/<YOUR_DOMAIN_NAME>.conf
Ergänzen Sie im Abschnitt [renewalparams] folgenden Eintrag:
renew_hook = sh /root/bin/freepbx-cert-update.sh
6. Erneuerung testen
certbot renew --dry-run
Bei erfolgreichem Test erhalten Sie eine Ausgabe ähnlich dieser:
Saving debug log to /var/log/letsencrypt/letsencrypt.log
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Processing /etc/letsencrypt/renewal/<YOUR_DOMAIN_NAME>.conf
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Simulating renewal of an existing certificate for <YOUR_DOMAIN_NAME>
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Congratulations, all simulated renewals succeeded:
/etc/letsencrypt/live/<YOUR_DOMAIN_NAME>/fullchain.pem (success)
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Führen Sie abschließend das Skript für den Zertifikatsaustausch einmal manuell aus:
sh /root/bin/freepbx-cert-update.sh
Abschluss
Damit ist die automatische Erneuerung und Integration von Let’s-Encrypt-Zertifikaten per DNS-Challenge in FreePBX 17 vollständig eingerichtet. Ihre FreePBX-Installation bleibt damit dauerhaft abgesichert – ganz ohne manuelle Zertifikatswechsel.


