HowTo: WPA3-Enterprise WLAN mit EAP-TLS (auf Unifi-Infrastruktur mit relution-MDM)

Hallo.
Heute hat es endlich geklappt: Wir konnten unseren freeRADIUS-Server endlich dazu bringen, selbst-signierte Zertifikate auszuliefern und zusätzlich nur die Gruppe „teachers“ ins WLAN zu lassen. Nun haben wir die Situation, die wir haben wollten: Es gibt ein WLAN, in das man nur noch gelangt, wenn mindestens eine der beiden Bedingungen erfüllt ist:

  • man ist Mitglied der Gruppe „teachers“ oder
  • man hat das gültige Client-Zertifikat auf dem Gerät (das per MDM auf die Tablets geschoben werden kann).

Hintergrund: Bisher haben wir allen Tablets per relution-Richtlinie die Einstellungen für das Geräte-WLAN mit PSK verpasst. Diesen Schlüssel kannte zwar niemand, doch er hat sich trotzdem auf irgendeinem Weg in der Schülerschaft verbreitet. Eigentlich kann man ihn nicht auf verwalteten Geräten auslesen, doch wir haben die Vermutung, dass ja nur ein Gerät dabei sein muss, bei dem „:man_shrugging: was-auch-immer :man_shrugging:“ anders läuft und schon kann das Passwort ans nächste Gerät gegeben werden (Apple-Feature → Bordmittel) :interrobang:

Aus diesem Grund haben wir über eine Alternative nachgedacht und sind nun bei Zertifikaten und EAP-TLS gelandet. Der Weg dahin war allerdings steinig und ich war mehrfach kurz davor alles in die Ecke zu werfen … als es dann aber heute Morgen endlich erfolgreich lief :wink: .

Ich schreibe die Vorgehensweise daher hier so gut es geht auf, damit andere hoffentlich schneller ans Ziel kommen:

Schritt 1: Die Theorie – hier im Forum lief das Thema ja schon öfter. So hat beispielsweise @tjordan schon öfter unermüdlich erklärt, wie das Verfahren prinzipiell funktioniert. Ich verlinke dennoch nochmal diesen Text, der mir beim Verständnis des ganzen Prozesses enorm geholfen hat: understanding the process of setting up eap-tls server/client certs

Schritt 2: Die Zertifikate – diese Seite erklärt sehr gut, wie man den freeRADIUS-Server konfigurieren muss, damit er selbst-signierte Zertifikate erstellt und bereit stellt. Das schöne daran ist: Es sind die Bordmittel, die freeRADIUS sowieso mitbringt. Man muss bei der Erneuerung des/der Client-Zertifikate also keine Klimmzüge machen:

Die dort gezeigte Vorgehensweise passt noch nicht ganz auf Apple-Geräte. Das hat uns auch nochmal echt Zeit und Mühe gekostet: Es ist scheinbar so, dass der Import des .p12-Zertifkates „neuerdings (?)“ einen Verschlüsselungsalgorithmus „für den Container“ verwendet, den die iOS-Geräte noch nicht verstehen :interrobang: Daher haben wir im Makefile des freeRADIUS-Containers bei den certs diese Option verwendet:

# Option -legacy eingefügt, damit der Import von p12-Datei auf iOS klappt! (14.04.2024)
client.p12: client.crt
        $(OPENSSL) pkcs12 -legacy -export -in client.crt -inkey client.key -out client.p12  -passin pass:$(PASSWORD_CLIENT) -passout pass:$(PASSWORD_CLIENT)
        chmod g+r client.p12

client.pem: client.p12
        $(OPENSSL) pkcs12 -legacy -in client.p12 -out client.pem -passin pass:$(PASSWORD_CLIENT) -passout pass:$(PASSWORD_CLIENT)
        chmod g+r client.pem
        cp client.pem $(USER_NAME).pem

Damit erhält man eine .p12-Datei, die entweder direkt auf die iOS-Geräte gepusht werden kann oder aber über ein MDM wie z.B. relution bereitgestellt werden kann :wink: . Damit funktioniert dann auch die Installation mit dem Passort, das man in der Datei client.cnf gesetzt hat! Das ging vorher nie – es wurde zwar nach einem Passwort gefragt, doch das Client-Zert konnte trotzdem nicht geöffnet werden!

Schritt 3: Der Test – Es gibt ein Tool für die Konfiguration namens eapol_test, das man
auf dem freeRADIUS-Server schnell nachinstallieren kann. Es heißt:

apt install eapoltest

Für dieses Tool haben wir uns eine Konfiguration gebastelt, die so aussieht:

cat eapol_test_tls.conf 
#
#   Usage: eapol_test -c eapol_test_tls.conf -p 1812 -s <localhost-secret aus clients.conf>
#
network={
        key_mgmt=WPA-EAP
        eap=TLS
        anonymous_identity="TestUser"

    # Uncomment to validate the server's certificate by checking
    # it was signed by this CA.
    ca_cert="./certs/ca.pem"

    # supplicant's public cert
    client_cert="./certs/client.crt"

    # supplicant's private key
     private_key="./certs/client.key"

    # password to decrypt private key
      private_key_passwd="super-geheimer-Schlüssel-für-das-Client-Cert aus client.cnf"
}

Wenn man das Tool durchlaufen lässt, sollte da am Ende stehen: SUCCESS
Das lief hier zunächst nicht richtig! Ich habe daher auch den freeRADIUS-Server ganz häufig im Debug-Modus laufen lassen (freeradius -X oder aber freeradius -XCConfiguration appears to be OK) und genau gelesen, welche Warnungen der Server ausspuckt. Einiges davon konnte man ganz schnell beheben, wie z.B. das Deaktivieren der nicht mehr notwendigen Datei „dh“ (Diffie-Hellman), über die sich der freeRADIUS-Server beschwert hat. Das war aber nur eine Warnung, von der ich nicht weiß, wie ausschlaggebend das am Ende war.

Schritt 4: Das Unifi-WLAN mit RADIUS-Profil –
Im Unifi-Controller haben wir ein neues WLAN-Profil eingerichtet:

und das passende RADIUS-Profil dazu eingerichtet:


Das Shared-Secret befindet sich auf dem freeRADIUS-Server unter clients.conf .
Warum dort bei uns die Ports 1912 und 1913 und nicht die Standard-Ports 1812 und 1813 eingetragen sind, steht nochmal auf einem anderen Blatt, da wir auf dem v7-Server im Moment zwei Instanzen für freeRADIUS verwenden. Die genauen Umstände warum und wieso, werden hier erläutert. Auf diese Weise ist bei uns gewährleistet, dass der „Original-freeRADIUS-Server“ alle in ein anderes WLAN lässt, die zur Gruppe p_wifi gehören. Der „neue/parallele freeRADIUS-Server“ sorgt hingegen dafür, dass nur Mitglieder der Gruppe teachers bedient werden! Es ist natürlich gut möglich, dass man das auch irgendwie eleganter über nur eine Instanz regeln kann :thinking: :interrobang: – aber „Hey: wfm!“

Schritt 5: Die Firewall – Die OPNSense-Firewall muss Zugriff von den Unifi-Accesspoints (bei uns nicht im gleichen Netz wie der v7-Server!) auf die RADIUS-Ports des v7-Servers erlauben! Daher habe ich auf der OPNSense eine Regel erstellt bzw erweitert, die das erlaubt (ALIAS für die Ports verwenden!)

Schritt 6: Das MDM – Das Bereitstellen der Zertifikate im relution-MDM + Richtlinie
Als das alles erledigt war, habe ich zunächst die beiden Dateien ca.der sowie client.p12 über die Nextcloud auf ein Tablet geholt und nacheinander aktiviert. Wie das geht, ist z.B. hier mit Screenshots hinterlegt:

Jetzt kommt der spannende Moment: das WLAN auf dem Endgerät auswählen und nachschauen, ob die Verbindung jetzt ohne weiteres Zutun funktioniert! Nach viel Frust und Fehlversuchen, hat das heute endlich geklappt. Man kann den Prozess auf dem freeRADIUS-Server verfolgen, wenn man ihn im Debug-Mode laufen lässt, also wie oben schon erwähnt: freeradius -X). Man kann aber auch unter /var/log/freeradius/radius.log mitlesen …

Schritt 7: Das Verteilen – Jetzt kann man die Zertifikate auch per relution verteilen lassen. Dazu haben wir auf dem Relution-Server zunächst die beiden Zertifikate ca.der und client.p12 unter Einstellungen -> Zertifikate hochgeladen und anschließend eine neue Richtlinie erstellt, die so aussieht:
mdm1

(hier ist im Moment nur noch TLS erlaubt)

(hier geht’s im Moment nur bis Version TLS-1.2 – TLS-1.3 müsste der freeRADIUS-Server aber auch schon können :man_shrugging: !)

Diese Richtlinie haben wir dann auf ein paar Testgeräten verteilt und siehe da: Nun ist es so wie es sein soll: Wenn man das Zertifikat nicht installiert hat, wird man nach Username/Passwort gefragt (und nur „teachers“ kommen rein) und wenn man es installiert hat, kommt man direkt ohne eigene Credentails rein. Auf diese Weise hoffen wir, dass mit dem Wildwuchs der Geräte im WLAN endlich Schluss ist. Produktiv läuft das ganze aber bisher nicht … die Testphase kann jetzt aber beginnen und ich bin froh, dass es endlich funktioniert hat. An der Länge der Anleitung sieht man ja schon, wie komplex das ganze am Ende geworden ist…

Der Vollständigkeit halber sei auch nochmal https://www.openxpki.org/ genannt (Tipp von @tjordan ). Ohne dass ich es mir genauer angesehen habe: Damit hat man die Zertifikate noch besser im Blick, da man dann eine eigene PKI („Public Key Infrastruktur“) betreibt.

Die hier vorgestellte Methode und insbesondere Erneuerung der Zertifikate funktioniert bisher natürlich alles andere als automatisch. Wenn nach einem Jahr (die max Gültigkeitsdauer für Apple-Zertifikate liegt meines Wissens bei 397 Tagen :interrobang: ) das Zertifikat ausläuft, muss es natürlich möglichst geräuschlos auf den Clients erneuert werden. Die eigentliche Erneuerung des client-Zertifikats auf dem freeRADIUS-Server geht zum Glück jetzt total einfach, da man nur „make client“ verwenden muss, doch danach muss der freeRADIUS-Server einmal neu gestartet werden und noch wichtiger: das neue client-Zertifikat muss natürlich wieder per Richtlinie auf alle Geräte. Ob und wie zuverlässig dieser Schritt klappt, steht bisher noch in den Sternen. Es wäre natürlich fatal, wenn die Richtlinie mit dem neuen Zertifikat nicht rechtzeitig ausgeliefert werden kann und dann eines morgens alle Geräte offline sind, weil das Zertifikat abgelaufen ist. Daher suche ich noch einen Weg, wie man das z.B. über die relution-API per Cronjob o.ä. machen könnte. Wenn also jemand noch einen guten Tipp diesbzgl hat, würde ich mich freuen…

So, das wär’s für Erste. Mal sehen, wer bis hierhin durchgehalten hat … und nun bin ich gespannt, ob das jemand gebrauchen kann und es so oder so ähnlich bei sich nachmacht. Auch wenn es hier vielleicht einfach klingt – das war es nicht, denn die Sache ist schon ziemlich komplex! Und ohne dieses Forum wäre das auch nicht gelungen :wink:

Viele Grüße,
Michael

6 „Gefällt mir“

Hallo Michael,

da du es gerade erwähnt hast. Der Export des Zertifikatsbundles im p12-Format ist eine echte Stolperfalle. Wenn man die openxpki einsetzt, bringt diese aber von Haus aus auch die Möglichkeit mit im sog. legacy-Format zu exportieren und damit klappt der Import auf den Mobilgeräten.

Viele Grüße
Thomas

Hallo.
In der Zwischenzeit haben wir gesehen, dass relution selbst auch in der Lage ist als „Build in PKI“ zu fungieren. Mir ist aber noch nicht klar, wie das dort funktionieren soll?!? Es könnte den ganzen Prozess aber erheblich vereinfachen, wenn man die Zertifikate nur auf verwalteten Endgeräten verteilen lassen will…
Wenn da jemand genauere Infos hat – immer gerne!
Viele Grüße,
Michael

Hallo Michael,

wenn Relution die PKI von Haus aus als Built-in oder Add-On mitbringt und sogar noch SCEP macht, was will man mehr? Umso besser. Wie genau das Relution macht, weiß ich aber auch nicht. Das Thema MDM ist jetzt nicht mein Spezialgebiet. Das kenne ich auch nur rudimentär.

VG
Thomas

Hallo Thomas,
das ist genau das Problem … es ist scheinbar nicht viel zu diesem Thema dokumentiert. Man kann unter relution unter Zertifizierungsstellen zwar bei Art der Zertifizierungsstelle einfach Built In wählen aber wie es dann weitergehen soll oder wie man damit anschließend Zertifikate erstellen kann, bleibt unklar.

Ich hatte es mir bisher so vorgestellt, dass eine PKI den gesamten Prozess übernimmt, also von der Erstellung der CA-Certs bis hin zu Server- und Client-Certs. Stimmt das so nicht?

Bei relution sieht das dann aber lediglich so aus:


Da ist mir nicht klar, was für ein Zertifikat da ausgewählt werden soll :man_shrugging: :interrobang:

Daneben gibt es bei den Einstellungen den Menupunkt Zertifikatsvorlagen – aber auch da ist mir nicht klar, was da reingehört oder wo man diese Vorlagen anschließend verwenden kann:

Zuletzt gibt es noch den Punkt Ausgestellte Zertifikate, doch der ist hier leer und man mit den Menupunkten auch nichts weiter anstellen, was in die Richtung „Erzeuge Cert!“ geht:

Lediglich das manuelle Hochladen der Zertifikate klappt problemlos – aber wie das unter relution mit der eigenen PKI funkionieren soll, erschließt sich mir bisher nicht :thinking: :interrobang:

Ideen?
Viele Grüße,
Michael

Hallo Michael,

ich würd ganz doof im Relution-Forum fragen oder den Support kontaktieren…keine Ahnung was mich deren Antwort im Zweifel einmalig kosten tät…

VG
Thomas

P.S.

Oder einfach rumtesten und spielen wenns keine Produktivumgebung ist.

… das habe ich natürlich längst gemacht … bisher aber ohne Reaktion.

Ok, das hat sich jetzt geklärt und funktioniert so:


Man benötigt also zunächst eine Zertifikatsvorlage, die man dann später in der Richtlinie einsetzen kann! Damit wird’s dann wirklich total einfach!

Dazu musste ich unter relution aber das CA.cert nochmal im P12-Format hochladen. Das ist mit der obigen Anleitung nicht ganz konstistent, da ich oben bisher nur das Format CA.der verwendet hatte … aber damit funktioniert es dann und wenn man das so einträgt, bekommt man PRO Gerät ein Zertifikat! Das macht die ganze Sache natürlich noch viel besser, da man es dann auch gezielt zurückziehen kann.

Ergänzung:
https://freeradius.org/documentation/freeradius-server/4.0~alpha1/raddb/certs/index.html#_performance

 openssl speed rsa

Bei uns direkt auf dem v7-Server (VM auf Proxmox-Host):

Doing 2048 bits private rsa's for 10s: 13043 2048 bits private RSA's in 9.98s
Doing 2048 bits public rsa's for 10s: 317416 2048 bits public RSA's in 9.94s

                  sign    verify    sign/s verify/s
rsa 2048 bits 0.000765s 0.000031s   1306.9  31933.2

Das sieht mehr als schnell genug aus für ~1000 Geräte, die morgens in die Schule kommen „und dort ihren Ausweis vorzeigen“ :wink:

Hallo Michael,

danke für den Tipp.
Sorgen muss ich mir wohl die nächsten Jahre nicht machen …

Doing 2048 bits private rsa's for 10s: 33498 2048 bits private RSA's in 10.00s
Doing 2048 bits public rsa's for 10s: 569158 2048 bits public RSA's in 10.00s

rsa 2048 bits 0.000299s 0.000018s   3349.8  56915.8

Hab gerade über Weihnachten einen neuen Server bekommen :slight_smile:
LG

Holger

Hallo Holger,
Ja, da sieht man schön, dass der Test voll auf die CPU geht → Auslastung geht direkt hoch auf 100%

Ich habe spaßeshalber mal verglichen und den gleichen Befehl auf dem Proxmox-Server und danach auf der VM abgesetzt. Das ist kaum ein Unterschied! Es wurde aber auch jeweils nur ein CPU-Kern verwendet und nicht auf alle Kerne verteilt…

Viele Grüße,
Michael

Wo ich schon dabei bin … noch eine Ergänzung:
Das Erstellen der Client-Zertifikate direkt über relution läuft jetzt wie am Schnürchen!

Wir haben mittlerweile über die Richtlinie mehr als 90% der Clients mit einem Zertifikat versorgen lassen – die restlichen Geräte erwischen wir in den kommenden Tagen vermutlich auch noch. Dann werden wir das WLAN mit dem PSK abstellen und komplett auf das WPA3-Enterprise-WLAN wechseln. Und dann ist auch endlich Ruhe in Sachen „Wie ist der PSK schon wieder in Schülerhände gelangt?“

Auch das automatische Erneuern der Client-Zertifikate funktioniert bereits. Es bleibt aber dabei, dass man --zumindest für Apple-Geräte-- das hier beachten muss:

Viele Grüße,
Michael

Soooo … um das Kapitel „Privatgeräte im Schul-WLAN“ hoffentlich für die nächste Zeit abzuschließen, folgt hier ein Screenshot aus dem Unifi-Controller:

Um kurz nach 9 haben rund 400 Schülerinnen und Schüler vermutlich sehr sparsam auf ihre privaten Smartphones geschaut :wink:

Die restlichen Tablets laufen seitdem spürbar performanter …

Übrigens habe ich mir natürlich die freeRADIUS-Logs angeschaut … seit 9 Uhr wurde selbstverständlich mit so ziemlich jedem Login, den man sich vorstellen kann, versucht wieder in das neue WPA3-Enterprise-WLAN zu gelangen …

Es wird wohl noch ein paar Tage dauern, bis sich die Erkenntnis durchsetzt, dass es kein Passwort mehr gibt, das man weitergeben könnte :+1:

2 „Gefällt mir“

Um ein paar nützliche Links zum Thema zusammen zu halten, poste ich hier auch nochmal das hier:

… auch unter diesen Thread packe ich der Vollständigkeit halber auch noch den Parallelthread zum Thema „dynamische VLANs und 802.1X“: