UniFi ist das Netzwerksystem von Ubiquiti mit einem tollem Softwaresystem aus Software-Controller, vielfältigen WLAN Access-Points, Netzwerkswitchen, Routern und das alles zu guten Preisen. Der Controller (CloudKey) bietet auch die Möglichkeit ein Hotspot-Gäste-Portal anzubieten. Damit der Controller mit SSL Verschlüsselung operiert sind einige Vorbereitungen notwendig.
Vorbereitungen
Als Namen für den Controller habe ich wlan.sotzny.de gewählt.
1. Natürlich benötigt man vorher das Let´s Encrypt Zertifikat. Dafür habe ich bei mir im Froxlor eine Subdomain wlan.sotzny.de angelegt und Froxlor kümmerte sich darum das Domain zu überprüfen und das Zertifikat zu besorgen. Hier kann man auch einen eignen Prozess etablieren der das für einen macht. Am Ende muss man die .crt und .key Datei besitzen.
2. Auf dem UniFi Security Gateway muss in der Datei /etc/hosts ein Eintrag für die Domain mit der IP des CloudKeys erfolgen. Dazu verbindet man sich mit dem Device Passwort (aus Site) und dem Benutzernamen admin
echo 192.168.100.100 wlan.sotzny.de >> /etc/hosts
Dies ist notwendig, damit intern die Nutzer auf den Cloudkey umgeleitet werden.
Einspielen des Zertifikates
Es gibt zwei Stellen wo das Zertifikat genutzt werden muss. Einmal läuft auf dem Cloudkey ein nginx der einfach nur die .crt und die .key Datei benötigt.
Die Zertifikatsdateien sind per scp auf den cloudkey nach /etc/ssl/private zu kopieren:

# per SSH auf den CloudKey Verbinden - Device Passwort aus Einstellungen > Site
ssh root@unifi
# nginx beenden
/etc/init.d/nginx stop
# in diesem Ordner liegen die SSL Zertifikate
cd /etc/ssl/private
# entfernen der alten Dateien - optional sichern
rm cloudkey.crt
rm cloudkey.key
# Link setzen von den Let´s Encrypt Certs auf die neuen Orte
ln -s wlan.sotzny.de.crt cloudkey.crt
ln -s wlan.sotzny.de.key cloudkey.key
# Restart
/etc/init.d/nginx start
Nach einem Restart ist Port 443 auf dem CloudKey bereits umgestellt. Aber der Controller selbst ist eine JAVA-Anwendung die auf Port 8443 läuft. Um der Java-Machine das Let´s Encrypt Zertifikat zu überreichen muss man einen Java KeyStore (JKS) erstellen. Für die Erstellung benötigt man zuerst die Schlüssel als PKS12.
Dafür und für den JKS wird ein Passwort benötigt. Der Controller kennt das Passwort und kann den JKS öffnen.
Das Passwort lautet: aircontrolenterprise
# beenden des UniFi Controllers
service unifi stop
# alten JKS löschen
rm unifi.keystore.jks
# umwandeln nach pkcs12
openssl pkcs12 -export -in cloudkey.crt -inkey cloudkey.key -out unifi.p12 -name unifi -password pass:aircontrolenterprise
# JKS erstellen
keytool -importkeystore -srckeystore unifi.p12 -srcstoretype PKCS12 -srcstorepass aircontrolenterprise -destkeystore unifi.keystore.jks -storepass aircontrolenterprise
# alte pkcs12 Datei wieder löschen
rm unifi.p12
Jetzt wurde der neue JKS erstellt und kann benutzt werden. Damit der Zugriff gewährleistet ist sollten noch die Dateirechte neu gesetzt werden.
# Berechtigungen neu setzen
chown root:ssl-cert cloudkey.crt cloudkey.key unifi.keystore.jks
chmod 640 cloudkey.crt cloudkey.key unifi.keystore.jks
# restart
/etc/init.d/nginx restart; /etc/init.d/unifi restart


Automatisches Update
Damit nun das Zertifikat ständig aktualisiert wird sollte man nun einen Cron-Job einrichten, welcher das Let´s Encrypt Zertifikat auf den CloudKey kopiert und das Skript zum Austausch aufruft. 1x die Woche sollte genügen 😀
Pingback: [UniFi] Umstellung Gäste-Portal auf https | Mein Blog
Hallo, Super die Erklärung. Funktioniert einwandfrei.
Wie/ wo ist der Autostart bei dem CloudKey damit das Script beim Start geladen wird. Denn bei jedem Neustart ist alles beim alten.