SSL in lokaler Entwicklungsumgebung

In Zeiten von HTTPS-only-Browsern, SameSite-Cookies und realitätsnahen Entwicklungsbedingungen ist es wichtig, lokal mit echten SSL-Zertifikaten zu arbeiten. Let's Encrypt hat hier Pionierarbeit geleistet – mit Hilfe von certbot und Cloudflare ist das Anlegen und Erneuern von Wildcard-Zertifikaten schnell erledigt. Damit kann man auf jedem Gerät (Smartphone, VM, ...) im lokalen Netz oder per VPN auf seine Webprojekte verschlüsselt zugreifen.


Wir registrieren zunächst bei Cloudflare eine Entwicklerdomain, beispielsweise vielhuber.dev:

Diese Domain lassen wir nun per DNS auf die eigene lokale IP-Adresse (beispielsweise 192.168.0.2) zeigen. Dazu legt man folgende DNS-A-Records an (wichtig: Der Proxy-Status muss dabei auf grau/DNS-only gesetzt sein):

TypNameInhalt
A@192.168.0.2
A*192.168.0.2

Zur Validierung der Wildcard-Zertifikate ist es notwendig, automatisiert TXT-Records zu setzen. Dafür legen wir nun ein API-Token an (Profile > API Tokens > Create Token > Template: Edit zone DNS) und wählen die Domain aus:

Schließlich richten wir certbot ein:

sudo apt install certbot python3-certbot-dns-cloudflare
pip install --upgrade pyOpenSSL cryptography certbot certbot-dns-cloudflare

Nun hinterlegen wir das zuvor generierte API-Token:

mkdir -p ~/.secrets/certbot
nano ~/.secrets/certbot/cloudflare.ini
dns_cloudflare_api_token = YOUR_CLOUDFLARE_API_TOKEN_WITH_EDIT_ZONE_DNS_PERMISSIONS
chmod 600 ~/.secrets/certbot/cloudflare.ini

Schlussendlich fordern wir ein Zertifikat an:

certbot certonly \
  --dns-cloudflare \
  --dns-cloudflare-credentials ~/.secrets/certbot/cloudflare.ini \
  --dns-cloudflare-propagation-seconds 60 \
  -d '*.vielhuber.dev' -d vielhuber.dev \
  --agree-tos \
  --email david@vielhuber.de \
  --non-interactive

Die automatische Verlängerung ist ebenfalls schnell eingerichtet. Damit certbot nicht automatisch alle 12 Stunden mit Zufallszeit läuft, deaktivieren wir zunächst das Standard-Script und fügen ein eigenes hinzu:

sudo mv /etc/cron.d/certbot /etc/cron.d/certbot.disabled
( crontab -l 2>/dev/null; echo "0 12 * * * certbot renew --quiet" ) | crontab -
certbot renew --dry-run

Damit ist alles angerichtet: Zur Einbindung in Apache verweist man in seinen Projekten auf die soeben erstellten Zertifikate in der Apache-Konfiguration (z.B. /etc/apache2/sites-available/project-xy.conf):

SSLEngine on
SSLCertificateFile /etc/letsencrypt/live/vielhuber.dev/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/vielhuber.dev/privkey.pem

Nach einem Apache-Neustart (sudo systemctl reload apache2) sind die Zertifikate dann bereits aktiv und man kann auf seine Projekte zugreifen mit https://project-xy.vielhuber.dev.

Mit ein wenig Initialaufwand kann man eine lokale Entwicklungsumgebung mit echten Wildcard-Zertifikaten aufbauen, die nicht nur realitätsnah ist, sondern auch mit modernen Browsern, APIs und Devices problemlos zusammenarbeitet. Dank DNS-01-Verifikation braucht man weder einen öffentlich erreichbaren Server noch manuelle Zertifikatsanträge – alles läuft automatisiert, sicher und zuverlässig.

Zurück