Let's encrypt für interne Webdienste

hier mit einem Webhosting-Paket bei Strato

Meckert Euer Browser auch immer rum, dass die lokale Nextcloud-Installation "unsicher" sei?
Die Webseite des NAS ist zwar per SSL verschlüsselt, aber Firefox bringt eine Fehlermeldung "self signed certificate"?

Was im Internet zur Pflicht geworden ist, sollte ja auch zuhause gehen, ohne die Kisten "nach außen" zu lassen.

Die Lösung:

Mit Let's encrypt lassen sich auch Zertifikate für Server ausstellen, die nicht im Internet erreichbar sind. Da es über die Standard-Funktionalität nicht funktioniert, muss man etwas in die Trickkiste greifen. Stichwort: DNS-Challenge.
Vorteil: Mit der DNS-Challenge lassen sich auch Wildcard-Zertifikate erstellen. smile

Zusammengefasst:

  1. Installiere den certbot auf einem Rechner mit Internetzugang (keine Freigabe ins Internet nötig!)
  2. Lege auf deinem Webhosting-Paket für die ausgewählte Domain zwei DNS TXT-Einträge mit dem Präfix "_acme-challenge" und einem beliebigen Text an
  3. Starte den certbot vom Rechner mit folgenden Optionen:
    sudo certbot -d domain.tld -d *.domain.tld --manual --preferred-challenges dns certonly
  4. Es erfolgt eine vorgegebener TXT-Wert - trage diesen zum ersten TXT-Präfix ein
  5. Prüfe in einem zweiten Terminal mittels
    dig _acme-challenge.domain.tld TXT
    ob der erste Wert in der Ausgabe erscheint
  6. Es kommt ein weiterer TXT-Wert als Vorgabe vom certbot - trage diesen zum zweiten TXT-Präfix ein.
  7. Warte die TTL (Time to live) ab, in der Regel 150 Sekunden - also 2,5 Minuten.
  8. Prüfe nochmals im zweiten Terminal mittels
    dig _acme-challenge.domain.tld TXT
    ob nun beide Werte in der Ausgabe erscheinen
  9. Das Zertifikat wird erstellt und auf dem lokalen Rechner abgelegt.
  10. Da das Zertifikat ein Wildcard-Zertifikat für die Domain "domain.tld" ist, kann es für alle Subdomains "xyz.domain.tld" verwendet werden. Die Zertifikatsdatei und die Schlüsseldatei kann man auf die entsprechenden "Server" kopieren.
  11. Lege DNS-Einträge im lokalen Router (oder DNS-Server) für die lokalen Dienste im Netz an. Sollte das nicht gehen (Router kann das nicht) dann kann man auch die hosts-Datei auf allen Clients anpassen. Damit man die Dienste hausintern über https://xyz.domain.tld erreichen kann.
  12. Sollen die Dienste auch über Internet erreichbar sein (VORSICHT!) dann muss man noch eine Portfreigabe am Router einrichten und ggf. eine Subdomain beim Provider einrichten die einem CNAME-EIntrag auf die DynDNS-Adresse der öffentlichen IP des Routers zeigt.

Die Schritte 3 bis 10 muss man spätesten alle 90 Tage (Laufzeit der Let's encrypt-Zertifikate) erneuern. Ich habe derzeit für diese Methode noch keine Automatisierungs-Möglichkeit gefunden - also das anpassen der TXT-Einträge bei Strato. Alle anderen Schritte lassen sich automatisieren.

Es empfiehlt sich über ein Monitoring zu erfassen, wann es soweit ist, dass Zertifikate ablaufen (eine Warnung paar Tage vorher per Mail macht Sinn).

Ich werde die Anleitung noch etwas präzisieren, damit man das auch problemlos "nachbauen" kann.