Verwendung von Let’s Encrypt Zertifikaten mit einer FRITZ!Box

Zertifikaten mit einer FRITZ!Box

Heute, als ich versuchte, mich aus der Ferne bei meinem Heimrouter (einer FRITZ!Box) anzumelden, wurde ich mit einem TLS-Zertifikatsfehler begrüßt. Ich war mir ziemlich sicher, dass es mein Router ist, aber bin ich wirklich daran interessiert, ein Passwort in ein Feld einzugeben, von dem ich keine Ahnung habe, ob es sich tatsächlich um meine Maschine oder um eine gut aussehende fritzbox eigenes zertifikat erstellen handelt? Ein klares Zeichen dafür, dass es an der Zeit ist, ein besseres Zertifikat zu verwenden als ein selbstsigniertes, das ich nicht aus der Ferne überprüfen kann.

fritzbox eigenes zertifikat erstellen

Ich verwende Let’s Encrypt für alle meine anderen Zertifikate, also warum nicht auf meinem Router? Allerdings habe ich wenig Informationen darüber gefunden, wie man sie mit der FRITZ!Box verwenden kann. Glücklicherweise ist es ziemlich einfach.

Es gibt keine offensichtliche Möglichkeit, certbot direkt auf den Router laufen zu lassen, außer vielleicht bei Freetz, aber das ist (noch?) nicht mein Fall. Also lasse ich noch FRITZ!OS (6.83 zum Zeitpunkt dieses Schreibens) laufen, das zwar nicht ganz kostenlos und manchmal lästig, aber im Allgemeinen gut funktioniert.

Die nächstbeste Wahl ist einfach die Verwendung von certbot auf einer Maschine hinter dem Router, mit einer angemessenen Umleitung des Ports 80 aus der Box (es ist eigentlich mein öffentlicher Server in der DMZ).
Weiterleitung des Ports 80 von der FRITZ!Box an einen internen Server

Der nächste Schritt besteht einfach darin, cerbot wie gewohnt auf dem internen Server mit der gewünschten Domäne auszuführen. Ich bevorzuge die Webroot-Methode, da sie keinen Neustart meines Webservers erfordert.

Jetzt machen wir weiter

Sobald das Zertifikat ausgestellt wurde, landet das gesamte kryptographische Material in /etc/letsencrypt, entweder im Leben der Schlüssel, für das Zertifikat oder im privaten Schlüssel.

Wir müssen beide Dateien in die FRITZ!Box übertragen, aber das entsprechende Formular erlaubt nur den Upload einer Datei im PEM-Format. PEM hat diese schöne Eigenschaft, dass dank seines Trennzeichens mehrere Dateien zu einer zusammengefügt werden können. Das ist genau das, was die FRITZ!Box braucht.

Hochladen eines Let’s Encrypt Schlüssels und Zertifikats in die FRITZ!Box

Beachten Sie, dass diese Datei ziemlich empfindlich ist, so dass man gut daran tun sollte, jede andere Kopie davon zu löschen, sobald sie auf den Router hochgeladen wurde.
Erledigt!

Ein weiteres Problem besteht darin, die Erneuerung des Zertifikats bei Bedarf zu automatisieren. certbot wird es automatisch tun, wenn es dafür eingerichtet ist (z.B. über cron oder einen anderen Planungsmechanismus), aber der Upload-Teil muss noch manuell erfolgen; das Hauptproblem ist, dass FRITZ!OS jetzt ziemlich nah an einer einseitigen App ist und es scheint keine kanonische URL zu geben, die zum Hochladen des erneuerten Zertifikats mit z.B. cURL verwendet werden kann.

EDIT 2018-08-15: Wie in den Kommentaren unten erläutert, gibt es Möglichkeiten, die FRITZ!Box API-Endpunkte zu verwenden, um das Zertifikat automatisch hochzuladen. Dank des Beispiels von Wikrie habe ich am Ende ein kleines Python CLI-Dienstprogramm geschrieben, das sich um die Authentifizierung und den Zertifikatsupload kümmert. Es sollte als Bibliothek verwendbar sein, auf der man aufbauen kann (insbesondere das Authentifizierungsteil). Lasst es mich in den Kommentaren wissen, wenn ihr etwas Gutes damit gemacht habt!