nordicmike
Goto Top

IPhone Authentifizierung am NPS nur mit Zertifikat

Moin zusammen,

Aufbau:
Unifi Controller mit Accesspoints
Windows Server 2022 mit NPS Rolle
Domain Controller

Ich möchte, dass sich die Clients per Zertifikat am Radius anmelden.

Mit einem Windows Client funktioniert das auch prima, man wählt das Zertifikat aus und man muss keinen Benutzernamen/Passwort mehr eingeben.
Das iPhone hat zwar auch ein Zertifikat erhalten, verlangt jedoch immer einen Benutzernamen / Passwort, sonst kann man die Anmeldemaske nicht absenden, obwohl unter dem Usernamen/Passwort Feld das Zertifikat bereits ausgewählt wurde. Es kommt die Meldung "Username darf nicht leer sein".

Geht das mit dem iPhone nicht? Hat das jemand mit einem iPhone bereits am Laufen?

Wenn ich dann Username und Passwort ausfülle, bekommt der NPS die Anfrage und kann dementsprechend erlauben oder ablehnen. Aber ohne Username geht gar nichts...


Danke euch and keep rockin'

Der Mike

Content-ID: 12689353433

Url: https://administrator.de/forum/iphone-authentifizierung-am-nps-nur-mit-zertifikat-12689353433.html

Ausgedruckt am: 23.12.2024 um 19:12 Uhr

12168552861
12168552861 16.04.2024 aktualisiert um 21:43:49 Uhr
Goto Top
man wählt das Zertifikat aus und man muss keinen Benutzernamen/Passwort mehr eingeben.
Normal weil Windows dabei per Default den Windows Benutzernamen benutzt, geh einfach mal in die erweiterten Eigenschaften der Verbindung dann siehst du das Häkchen das der aktuelle User dafür verwendet wird.
Das iPhone hat zwar auch ein Zertifikat erhalten, verlangt jedoch immer einen Benutzernamen / Passwort, sonst kann man die Anmeldemaske nicht absenden, obwohl unter dem Usernamen/Passwort Feld das Zertifikat bereits ausgewählt wurde. Es kommt die Meldung "Username darf nicht leer sein".
Auch normal, eine identity ist für die Zuordnung am Radius im Normalfall mandatory, wenn du beim Verbinden auf EAP-TLS stellst wird die Identity automatisch eingetragen.


Works as designed 😉

Gruß
aqui
Lösung aqui 16.04.2024, aktualisiert am 18.04.2024 um 12:57:51 Uhr
Goto Top
Funktioniert fehlerlos....
Der Trick ist beim Verbinden...
  • auf "Sicherheit" zu tippen und dann dort EAP-TLS auswählen das danach ein blauer Haken erscheint.
  • dann auf "Identität" tippen und das User Zertifikat ebenso blau anhaken. Dann wird auch oben der "Verbinden" Button ebenfalls blau und so muss man keinen Benutzernamen oder PW angeben! Das Feld bleibt leer.
Works as designed! 😉 👍

iphone
⚠️ Noch eine Warnung für all diejenigen die ihre PKCS12 User Zertifikate (.p12 oder .pfx) mit OpenSSL erzeugen ala:
openssl pkcs12 -export -out user.pfx -inkey user.key -in user.crt

Apple hat sich von der OpenSSL Entwicklung abgekoppelt und benutzt eigene Passwort Algorythmen mit dem Ergebnis das bei Import ins iPhone das Passwort nicht erkannt wird und das iPhone immer ein falsches Passwort anmeckert obwohl dies korrekt ist.
Nutzt man dann mit:

openssl pkcs12 -export -legacy -out user.pfx -inkey user.key -in user.crt

das alte Verfahren klappt es auch mit dem iPhone sofort! 😉
Mr-Gustav
Mr-Gustav 17.04.2024 um 08:55:08 Uhr
Goto Top
Normalerweise sollte das so klappen wie aqui oben geschreiben hat.

Wir verteilen das WLAN Zertifikat derzeit über das MDM und darüber dann auch gleich die passende Konfig für´s WLAN. Klappt alles wie es sollte.

Nächster Schritt wird bei und sein das sich die iPhone selber die zertifikate abholen und somit jedes iPhone sein eigenes Zertifikat bekommt
aqui
aqui 18.04.2024 um 12:56:51 Uhr
Goto Top
Wenn es das denn war bitte deinen Thread dann als erledigt schliessen!
Wie kann ich einen Beitrag als gelöst markieren?
NordicMike
NordicMike 19.04.2024 aktualisiert um 08:51:18 Uhr
Goto Top
Ich habe heute nochmal ein Zeitfenster hier ein bisschen weiter zu testen.

Der Vorgang auf dem iPhone verhält sich so, wie aqui es in seinen Bildern beschreibt. Den Benutzernamen lasse ich leer, das Zertifikat ist ausgewählt, wie auf den Bildern.

Beim Absenden kommt eine Meldung "Verbindung zum Netzwerk "MeinWLAN" ist fehlgeschlagen.

Im Log des NPS steht:
Der Netzwerkrichtlinienserver hat einem Benutzer den Zugriff verweigert.

Wenden Sie sich an den Administrator des Netzwerkrichtlinienservers, um weitere Informationen zu erhalten.

Benutzer:
	Sicherheits-ID:			meinedomain\MEINCERTNAME
	Kontoname:			MEINCERTNAME
	Kontodomäne:			MEINEDOMAIN
	Vollqualifizierter Kontoname:	MEINEDOMAIN\MEINCERTNAME

Clientcomputer:
	Sicherheits-ID:			NULL SID
	Kontoname:			-
	Vollqualifizierter Kontoname:	-
	ID der Empfangsstation:		1B-2C-C6-4C-35-AB:meinedomain
	ID der Anrufstation:		B4-F1-CC-22-4D-67

NAS:
	NAS-IPv4-Adresse:		10.11.12.12
	NAS-IPv6-Adresse:		-
	NAS-ID:			8a2aa89b95d4
	NAS-Porttyp:			Drahtlos (IEEE 802.11)
	NAS-Port:			-

RADIUS-Client:
	Clientanzeigename:		MeinAP
	Client-IP-Adresse:			10.11.12.4

Authentifizierungsdetails:
	Name der Verbindungsanforderungsrichtlinie:	Alle Clients über AP
	Netzwerkrichtlinienname:		Alle iPhones mit Zertifikat
	Authentifizierungsanbieter:		Windows
	Authentifizierungsserver:		npsserver.dc.meinedomain.de
	Authentifizierungstyp:		EAP
	EAP-Typ:			Microsoft: Smartcard- oder anderes Zertifikat
	Kontositzungs-ID:		3435374567546746734563452453425
	Protokollierungsergebnisse:			Die Kontoinformationen wurden in die lokale Protokolldatei geschrieben.
	Ursachencode:			16
	Ursache:				Authentifizierungsfehler aufgrund der Nichtübereinstimmung von Benutzeranmeldeinformationen. Der angegebene Benutzername ist keinem vorhandenen Benutzerkonto zugeordnet, oder das Kennwort war falsch.

Die Netzwerkrichtlinie sieht so aus:
2
1

Ich habe auch testweise im AD einen Benutzer mit dem Namen MEINCERTNAME und selbigem Passwort angelegt.

Habe ich irgendwo was vergessen?
NordicMike
NordicMike 19.04.2024 um 10:26:08 Uhr
Goto Top
Fehler gefunden. Dank aqui habe ich gesehen, wie es funktionieren "müsste". Das Problem war das Zertifikat. Es muss einen SAN Eintrag enthalten. Der reine Antragsteller reicht nicht aus.

Danke an alle nochmal...
aqui
aqui 19.04.2024, aktualisiert am 14.06.2024 um 15:54:33 Uhr
Goto Top
Wenn man das User Zertifikat mit OpenSSL erzeugt macht gibt man das menügeführt an:
Bei Windows Clients muss man zusätzlich beachten das die das Attribut "clientAuth" im Extended Key Usage erzwingen. Deshalb macht es Sinn die User Zertifikate gleich immer damit zu erstellen.
Hier die Prozedur für die OpenSSL Fraktion: face-wink
Dazu erstellt man zuerst eine kleine Textdatei (nano etc.) z.B. user-eku.txt mit dem Inhalt:
extendedKeyUsage=clientAuth 

Dann den Key erstellen:
openssl ecparam -name prime256v1 -genkey -noout -out user1.key

Danach den CSR der die Daten wie Common Name, SAN usw. abfragt. Common Name (CN) und Email Adresse sollten hier User spezifisch sein. CN darf keine Leerzeichen enthalten!
openssl req -new -sha256 -key user1.key -out user1.csr

Danach wird das User Zertifikat erzeugt wozu man das CA Zertifikat und den CA Key benötigt:
openssl x509 -req -in user1.csr -CA <CA-Zertifikat> -CAkey <CA-Key> -CAcreateserial -out user1.crt -days 1825 -sha256 -extfile user-eku.txt

Zum Schluss packt man User Zertifikat und User Key in die PKCS12 Datei zum Import für den Client:
openssl pkcs12 -export -out user1.p12 -inkey user1.key -in user1.crt
Beim iPhone dann natürlich: openssl pkcs12 -export -legacy -out user1.p12 -inkey user1.key -in user1.crt face-wink

Detailierte Anleitung auch HIER.
colinardo
colinardo 19.04.2024 aktualisiert um 11:25:52 Uhr
Goto Top
Achtung, neuere Windows Server erzwingen mittlerweile ein Strong-Certificate Mapping.mit der SID des Users oder Computers als Erweiterung im Zertifikat wenn man das Strong-Mapping per Registry nicht modifiziert hat.
Für Domain fremde Computer habe ich das hier bereits dokumentiert.
NPS 802.1x Radius Authentication with EAP-TLS and strong certificate mapping for non domain joined devices
Für User gilt das gleiche, auch das ein User-Account angelegt werden muss und der UPN im SAN angelegt sein muss.
Für angelegte AD-User mit denen man ein User-Zertifikat über die Default Vorlage anfordert wird bei einer Windows CA die SID automatisch ins Zertifikat eingetragen.
Ansonsten muss diese manuell ins Zertifikat eingetragen werden. Eine Funktion die den Wert für die Extension generiert habe ich im verlinkten Artikel berit gestellt.

Grüße Uwe