Sonntag, 17. Dezember 2017

Let's encrypt Sicherheitszertifikat für das pf Webinterface

Verschlüsselung aber gültig

Transportverschlüsselung wird immer wichtiger. So wird der Webzugriff auf Appliances wie PFsense schon seit vielen Jahren per Default auf https umgeleitet. Ganz im Gegenteil zu den vielen CPE's welche den Laien von ihren Providern sträflich ohne solch eine Funktion oder gar Möglichkeit aufs Auge gedrückt werden.
Hinter dieser Funktion steckt jeweils ein selbst signiertes Zertifikat, welches man zB. selber beglaubigen und auf die Maschinen welche den Zugriff machen sollten, importieren könnte. Den Meisten dürfte solche ein Verhalten bestenfalls noch von einem allfälligen NAS bekannt sein. Üblicherweise quittiert der Browser dies mit einem roten https in der Adresszeile. Janu, damit ist die Verbindung zumindest verschlüsselt, aber wenig vertrauenerweckend.
Da jetzt sogar AVM für ihre Fritzboxen beginnt gültige Zertifikate zu erstellen, möchte ich in diesem Beitrag das Pendant dazu in PFsense beschreiben.
Ich erkläre wie man mit dem ACME Paket für pfsense eine Zertifikat mittels DNS Challenge anfordern kann und wie man dieses Zertifikat dann verwendet.
Die DNS Challenge mag ich besonders, da man keinen Websocket dafür öffnen muss, auch nicht temporär und man in diesem Zusammenhang ja so oder so mit Domain Namen arbeitet. In diesem Beispiel mache ich die Challenge über Cloudflare.

ACME Paket installieren

Unter System > Package Manager > Available Packages findet sich das acme package, welches zu installieren ist. Dies geschieht mit all seinen Abhängigkeiten automatisch.

acme package


Account key kreieren

Acount key
Nach der Installation steht ACME unter Services > ACME auch schon zur Verfügung.
Als erstes muss mann einen Account key eröffnen. Einen solchen Account key erstellt man üblicherweise pro Server einmal. Also in diesem Fall auch für die PFsense.

Dem Account vergibt man einen Namen. Wer möchte kann dies unter
Description noch etwas genauer beschrieben.
Unter Acme Server hat man die Wahl zwischen Production und Stagging. Production für den ordentlichen Betrieb, stagging wenn man mal etwas testen möchte.



Als nächstest generiert man über "Create new account key" einen Schlüssel, welchen man danach mittels "Register acme account key" registriert.



Zertifikat erstellen

Als nächstes erstell man das Zertifikat und zwar unter Services > Acme > Certificates

Auch hier vergibt man einen Namen und kann die Beschreibung noch ergänzen. Der Status ist aktiv. Unter Acme Account wählt man den zuvor erstellen Account. Die Key Grösse kann man hier möglichst gross wählen.
Spannend wird es dann unter der SAN list. Beim Domainname gibt man den Namen an auf den das Zertifikat erstellt werden soll. Unter diesem Namen ist dann die pfsense

später auch erreichbar. Als Challenge Methode mag ich wie in der Einleitung bereits geschrieben, DNS. Man hat hier diverse DNS Anbieter zur Wahl. Im Falle von Cloudflare benötigt man dazu nur die Mail-Adresse unter der man die Domain registriert hat und den API Key. Das alles speichert man und klickt in der nachfolgenden Übersicht das erste Mal auf Renew.

Webconfigurator anpassen

Das Zertifikat hat man von let's encrypt zwar erhalten, genutzt wird es aber noch nicht. Um es zu verwenden braucht es unter System > Advanced > Admin Access noch zwei kleine Anpassungen.
Als erstes wählt man unter SSl Certificates das erstellte Cert aus.
Weiter unterscheidet sich PFsense von gewöhnlichen Scheissprodukten. Und zwar ist ein dns rebinding Schutz aktiv. Das lassen wir auch so, geben aber unter "Alternate Hostnames" noch den FQDN des Zertifikates an. Damit ist der rebinding Schutz für diesen Namen aufgehoben.


Domain Namen bekannt machen

Damit man die PFsense in Zukunft auch über den Domain Namen erreichen kann, mit dem das Zertifikat auch verknüpft ist, muss man diesen noch bekannt machen. Kann man machen indem man einen A Record des Namens mit der öffentlichen IP des Anschlusses beim DNS Hoster macht. Finde ich nicht unbedingt sinnvoll, da damit der Name damit offiziell aufgelöst werden kann, dass Webinterface aber so natürlich nicht von extern erreichbar ist/bleibt.
PFsense arbeitet in der Standard Konfiguration aber bereits als DNS Resolver. Aber selbst wenn man den Betrieb auf Forwarder geändert hat, so oder so, wir können DNS Namen im eigenen Netz propagieren.
Unter Services > DNS Resolver (oder je nachdem DNS Forwarder) > General Settings
Host Overrides, kann man entsprechend DNS Namen überschrieben, bzw. bekannt geben.
Das kann man hier für IPv4 sowohl als auch IPv6 machen. Im Beispiel die Version mittels IPv6.
Logische Konsequenz ist, dass ab sofort die Administration über IPv6, einem FQDN inkl Zertifikat welches offiziell beglaubigt ist, stattfindet. Schluss mit schnödem 192.168.1.1.