Mobile Clients mit Client Certificate authentifizieren
Guten Abend zusammen,
es geht um eine OPNsense (23.1-amd64) auf einem Mini-PC (Single Node). Es soll mit Hilfe des VPN Server ein IPSec IKEv2 für Mobile Clients bereitgestellt werden. Die Besonderheit in meinem Fall ist, dass die Authentifizierung mit Hilfe eines Clients Certificate erfolgen soll.
Ausgangslage sind die Anleitungen und zwei Beiträge.
IPsec VPN für mobile Benutzer auf der pfSense oder OPNsense Firewall einrichten
So, OPNsense Test war, wie zu erwarten, ebenso erfolgreich wie das Setup der pfSense oben.
OPNSense VPN IKEv2. läuft einfach nicht
IKEv2 VPN Authentifizierungsfehler
Nachschlagwerke:
https://blog.designed79.co.uk/wp-content/uploads/2021/01/VPN-IKEv2-with- ...
https://docs.netgate.com/pfsense/en/latest/recipes/ipsec-mobile-ikev2-ea ...
https://docs.opnsense.org/manual/how-tos/ipsec-rw-srv-eaptls.html
Nachstehend mein Vorgehen auf der OPNsense
Vorbereitungen CA
Konfiguration IPSec Phase 1
Konfiguration IPSec Phase 2
Konfiguration des Windows Server 2022 als Client
Fehlermeldung
Egal mit welche Authentication Method ich in der Phase1 von IPSec auf der OPNsense konfiguriere, die Fehlermeldung ist immer die Selbe:
Einzig mit der Authentication Method "RSA (local) + EAP-TLS (remote)" kann ich eine Verbindung aufbauen. Allerdings juckt es die OPNsense nicht, wenn dass Client Certificate a) nicht mehr dem User zugewiesen ist. b) auf der CRL steht. c) gelöscht wurde. Ebenfalls funktioniert die Authentication Method "EAP-MSCHAPV2" in Kombination mit Pre-Shared-Keys von Typ EAP. Wie es auch in den Anleitungen von @aqui beschrieben wird.
Ich habe gesucht und gesucht und gesucht und komme den Fehler nicht auf die Spur. Mehrfach die Zertifikate neu angelegt, die IPSec Konfiguration neu aufgebaut, etc.
Kann mir jemand sagen, was ich falsch gemacht habe? Alternativ gerne auch eine funktionierende Anleitung zu dem Vorhaben.
Gruß,
Dani
es geht um eine OPNsense (23.1-amd64) auf einem Mini-PC (Single Node). Es soll mit Hilfe des VPN Server ein IPSec IKEv2 für Mobile Clients bereitgestellt werden. Die Besonderheit in meinem Fall ist, dass die Authentifizierung mit Hilfe eines Clients Certificate erfolgen soll.
Ausgangslage sind die Anleitungen und zwei Beiträge.
IPsec VPN für mobile Benutzer auf der pfSense oder OPNsense Firewall einrichten
So, OPNsense Test war, wie zu erwarten, ebenso erfolgreich wie das Setup der pfSense oben.
OPNSense VPN IKEv2. läuft einfach nicht
IKEv2 VPN Authentifizierungsfehler
Nachschlagwerke:
https://blog.designed79.co.uk/wp-content/uploads/2021/01/VPN-IKEv2-with- ...
https://docs.netgate.com/pfsense/en/latest/recipes/ipsec-mobile-ikev2-ea ...
https://docs.opnsense.org/manual/how-tos/ipsec-rw-srv-eaptls.html
Nachstehend mein Vorgehen auf der OPNsense
Vorbereitungen CA
- System:Trust: Authorities: Eine neue CA mit dem Namen "OPNsense CA1" mit den Default Werten angelegt. Als Common Name "internal-ca" gewählt.
- System: Trust: Certificates: Ein neues Zertifikat vom Typ "Server Certificate" mit dem Descriptive name "IPSec Cert" erstellt. Dort als Common Name "opnsense01.sub.test.de" eingetragen. Als "Alternative Names" den Type "DNS" ausgewählt und jeweils als Wert "opnsense01" und "opnsense01.sub.test.de" hinterlegt.
- Einen Testbenutzer "Dani" angelegt. Anschließend in den Einstellungen ein Client Certificate mit Hilfe der CA "OPNsense CA1" generiert. Dort habe ich als Descriptive name "Test1" eingetragen. Als "Common Name" und "Alternative Names" vom Type "DNS" jeweils den Zeichen "Dani" eingetragen.
Konfiguration IPSec Phase 1
Konfiguration IPSec Phase 2
Konfiguration des Windows Server 2022 als Client
- Das Client Certificate des Benutzers "Dani" als PFX von der OPNsense exportiert.
- Mit einem Benutzer am Windows angemeldet. Das PFX File in dem Certifcate Store des Users im Bereich "Personal Certificate" importiert. Den Private Key als "exportierbar" markiert (sicher ist sicher).
- Das Certifcate der CA "OPNsense CA1" von der OPNsense exportiert, auf den Windows Server kopiert und dort in dem Certificate Store der Machine unter "Vertrauenswürdige Stammzertifizierungsstellen" importiert.
- Prüfung der Zertifizierungspfad des Client Certificates erfolgreich validiert.
- Eine neue VPN Verbindung hinzugefügt.
- Bypassing Server Certificate Validation for Troubleshooting konfiguriert, da keine CRL zur Verfügung gestellt wird. Referenz dazu ist Windows RAS Fehlercode: 13801
Fehlermeldung
Egal mit welche Authentication Method ich in der Phase1 von IPSec auf der OPNsense konfiguriere, die Fehlermeldung ist immer die Selbe:
Einzig mit der Authentication Method "RSA (local) + EAP-TLS (remote)" kann ich eine Verbindung aufbauen. Allerdings juckt es die OPNsense nicht, wenn dass Client Certificate a) nicht mehr dem User zugewiesen ist. b) auf der CRL steht. c) gelöscht wurde. Ebenfalls funktioniert die Authentication Method "EAP-MSCHAPV2" in Kombination mit Pre-Shared-Keys von Typ EAP. Wie es auch in den Anleitungen von @aqui beschrieben wird.
Ich habe gesucht und gesucht und gesucht und komme den Fehler nicht auf die Spur. Mehrfach die Zertifikate neu angelegt, die IPSec Konfiguration neu aufgebaut, etc.
Kann mir jemand sagen, was ich falsch gemacht habe? Alternativ gerne auch eine funktionierende Anleitung zu dem Vorhaben.
Gruß,
Dani
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 5745519444
Url: https://administrator.de/contentid/5745519444
Ausgedruckt am: 21.11.2024 um 11:11 Uhr
21 Kommentare
Neuester Kommentar
"opnsense01.sub.test.de" ist kein DistinguishedName sondern ein FQDN, ein DistinguishedName wäre bspw. Im einfachsten Fall /CN=opnsense01.sub.test.de. Mit oder ohne Slash, musst du schauen, habe gerade keine OPNSense im Zugriff.
Aber die OPNSense Logs zeigen dir eigentlich detailliert was beim Login falsch läuft.
Gruß wurstel
Aber die OPNSense Logs zeigen dir eigentlich detailliert was beim Login falsch läuft.
Gruß wurstel
Ich bin schonmal soweit gekommen das der Win 10 Client zumindestens nur anmeckert das er das Client Zertifikat nicht finden kann.
Das Client Zertifikat wurde aber im .p12 Format von der OPNsense exportiert und per Doppelklick in den User bezogenen Zertifikatsspeicher importiert.
Das kann nur noch ein kleiner Kinken irgendwo mit der Zertifikatszuordnung sein...?!
Das Client Zertifikat wurde aber im .p12 Format von der OPNsense exportiert und per Doppelklick in den User bezogenen Zertifikatsspeicher importiert.
Das kann nur noch ein kleiner Kinken irgendwo mit der Zertifikatszuordnung sein...?!
Die OPNSense kann offensichtlich keine Client-Auth mit EAP-TLS von Windows 10 aus laut der Compatibility-Matrix hier
https://docs.opnsense.org/manual/how-tos/ipsec-rw.html#vpn-compatibility
Sagt auch die Fehlermeldung
Mit ner PfSense geht es über EAP-TLS einwandfrei mit Certificate only. Shiet OPNSense ....
Bleibt bei der OPNSense nur RSA(Local) + EAP-TLS-Remote damit geht es hier auch wie bei dir.
https://docs.opnsense.org/manual/how-tos/ipsec-rw.html#vpn-compatibility
Sagt auch die Fehlermeldung
configured EAP-only authentication, but peer does not support it
Komisch wenn da ein strongswan im Background werkelt sollte man das eigentlich zum laufen bringen wenn man es auf der Konsole customized.Mit ner PfSense geht es über EAP-TLS einwandfrei mit Certificate only. Shiet OPNSense ....
Bleibt bei der OPNSense nur RSA(Local) + EAP-TLS-Remote damit geht es hier auch wie bei dir.
Nee die pfSense kann es out of the box ohne customizing.
Aber RSA(Local) + EAP-TLS(Remote) tut es ja auch auf der OPNSense, was missfällt dir daran? Hier wird der Client ja auch per Zertifikat authentifiziert.
Aber RSA(Local) + EAP-TLS(Remote) tut es ja auch auf der OPNSense, was missfällt dir daran? Hier wird der Client ja auch per Zertifikat authentifiziert.
Mit ner PfSense geht es über EAP-TLS einwandfrei mit Certificate only.
Das wäre ja mal sehr spannend... Das teste ich gleich mal aus!!Beide benutzen ja eine Strongswan VICI im Hintergrund. Müsste man glatt mal checken was die pfSense da dann anders konfiguriert sollte das stimmen. Ich check das mal hab hier 2 Kisten mit der latest und greatest laufen.
Servus @all,
Windows kann via IKEv2 kein EAP-TLS für die Authentifizierung des VPN-Servers, hier steht in Windows für IKEv2 nur die reine PublicKey-Methode zur Verfügung. Deswegen muss hier in der OPNSense/pfSense auch zwingend die Methode RSA + EAP-TLS gewählt werden wenn man sich mittels Windows und Client-Zertifikaten ausweisen möchte!
Man sieht das auch hier in der von Strongswan bereitgestellten Strongswan-Config:
strongSwan Configuration for Windows User Certificates
Ein testweise eingesetztes auth = eap-tls in der local config führt dann ganz klar zu einer not supported Meldung des Windows-Clients in der IKE Message auf dem Server.
"Beidseitige" EAP-TLS Auth funktioniert also definitiv nicht mit Windows-Clients, wer was anderes behauptet, lügt, zumindest zur Zeit .
Die CRLs müssen natürlich korrekt hinterlegt sein und der Strongswan diese auch aktualisieren. Dann klappt auch das Widerrufen der Zertifikate in diesem Modus. Wie die OPNSense das handhabt muss ich mir mal ansehen, offensichtlich nicht konsistent wenn diese die Einwahl trotz aktueller CRL zulässt.
In Strongswan gibt es dazu die Section authorities. Beispielhafte Config einer CA sieht so aus
Dann klappt auch das Revoking, ein Beispiel des Trace-Outputs von Strongswan:
Und Windows verweigert die Anmeldung dann natürlich auch
Für Realtime Checking für zurückgezogene Certs würde ich aber zu OSCP greifen das prüft auf zurück gezogene Certs bei jedem IKE-Auth Vorgang. Im Gegensatz zu CRLs die erst kurz vor dem Gültigkeits-Ablauf der Liste aktualisiert werden. Hier müsste man dann die Ablaufzeit bspw. auf 1-2 Tage stellen oder manuell den Cache aktualisieren damit das vernünftig läuft.
Grüße Uwe
Windows kann via IKEv2 kein EAP-TLS für die Authentifizierung des VPN-Servers, hier steht in Windows für IKEv2 nur die reine PublicKey-Methode zur Verfügung. Deswegen muss hier in der OPNSense/pfSense auch zwingend die Methode RSA + EAP-TLS gewählt werden wenn man sich mittels Windows und Client-Zertifikaten ausweisen möchte!
Man sieht das auch hier in der von Strongswan bereitgestellten Strongswan-Config:
strongSwan Configuration for Windows User Certificates
Ein testweise eingesetztes auth = eap-tls in der local config führt dann ganz klar zu einer not supported Meldung des Windows-Clients in der IKE Message auf dem Server.
"Beidseitige" EAP-TLS Auth funktioniert also definitiv nicht mit Windows-Clients, wer was anderes behauptet, lügt, zumindest zur Zeit .
Die CRLs müssen natürlich korrekt hinterlegt sein und der Strongswan diese auch aktualisieren. Dann klappt auch das Widerrufen der Zertifikate in diesem Modus. Wie die OPNSense das handhabt muss ich mir mal ansehen, offensichtlich nicht konsistent wenn diese die Einwahl trotz aktueller CRL zulässt.
In Strongswan gibt es dazu die Section authorities. Beispielhafte Config einer CA sieht so aus
authorities {
myca {
cacert = my_ca.pem
crl_uris = "http://domain.de/mycrl.pem"
}
}
Und Windows verweigert die Anmeldung dann natürlich auch
Für Realtime Checking für zurückgezogene Certs würde ich aber zu OSCP greifen das prüft auf zurück gezogene Certs bei jedem IKE-Auth Vorgang. Im Gegensatz zu CRLs die erst kurz vor dem Gültigkeits-Ablauf der Liste aktualisiert werden. Hier müsste man dann die Ablaufzeit bspw. auf 1-2 Tage stellen oder manuell den Cache aktualisieren damit das vernünftig läuft.
Grüße Uwe
Zitat von @Dani:
Hm... Kollege @5175293307 hat im Verlauf der Frage geschrieben/bestätigt, dass es bei ihm in Verbindung mit pfSense und Windwos funktioniert
Kann definitiv nicht sein, da muss er die Methoden verwechselt haben, es geht Prinzipbedingt nicht. Da habe ich vor einiger Zeit schon mal nachgeforscht und und bin tief in die IKEv2 Windows Interna eingestiegen deswegen bin ich mir da 100% sicher.Hm... Kollege @5175293307 hat im Verlauf der Frage geschrieben/bestätigt, dass es bei ihm in Verbindung mit pfSense und Windwos funktioniert
Diese Meldung im Logfile der OPNsense ist in diesen Fall korrekt.
Richtig.Ich konnte weder im Client- und noch Server-Zertifikat etwas zu Sperrlisten finden. In der Weboberfläche unter System: Trust: Revocation gibt es entsprechende Einträge für die CA. Ich habe dort sogar manuell eine CRL angelegt, bevor ich die Zertifikate für den IPSec-Server und Client ausgestellt habe. Evtl. bin ich inzwischen durch suchen, testen betriebsblind geworden.
Muss ich mir die Tage mal auf der OPNSense ansehen was da über die GUI geht, über die Strongswan-Config geht es auf jeden Fall, Frage ist ob die GUI weitere Anpassungen diesbezüglich zulässt, ansonsten bleibt nur Tweaking auf der Konsole. Heute aber keine Zeit mehr.In Strongswan gibt es dazu die Section authorities. Beispielhafte Config einer CA sieht so aus
Hast du die Konfiguration jetzt auf einer pfSense, OPNsense oder einfach unter einem Linux deiner Wahl durchgeführt?
Da muss ich mich tatsächlich korrigieren, sorry. @colinardo hat Recht, ich hatte da etwas in falscher Erinnerung.
Also, habe mir das mit CRLs und OCSP auf der OPNSense mal angeschaut. Folgende Punkte sind mir aufgefallen
Könnte man zwar seine eigene strongswan bauen und einpflanzen, das ist aber für Otto-Normalo nicht so einfach zu bewerkstelligen.
Beleibt also CRL oder Radius.
Die in die GUI integrierte CRL-Verwaltung hinterlegt die CRLs leider nicht im Strongswan-Verzeichnis, so das diese dort nicht berücksichtigt werden.
Hier könnte man die CRL selbst generieren und nach
Danach sind die dort enthaltenen zurückgezogenen Zertifikate gesperrt.
Alles in allem doch noch eine ziemliche Bastelei auf der OPNSense. Ich würde hier auf einen Radius (z.B. Onboard Freeradius via Plugin) ausweichen dann entgeht man diesem Gebastel auf der OPNSense und der Radius übernimmt die Validierung der Zertifikate etc . und dieser kann die CRL die man im Webinterface anlegen kann auch nutzen
Hth
Grüße Uwe
- Ein Plugin für OCSP gibt es (noch) nicht, einfaches Konfigurieren fällt also erst mal flach
- Habe dann mal per OpenSSL erfolgreich eine OCSP Instanz auf Port 8080 über die Konsole der OPNSense gestartet, das klappt schon mal. Dann zusätzlich unter
"/usr/local/etc/swanctl/conf.d/"
eine *.conf Datei mit der URL der gerade gestarteten OCSP Instanz hinterlegt und mitswanctl -b
in die aktuelle running config geladen, auch das war erfolgreich. Problem ist aber das die Strongswan-Version auf der OPNSense ohne "Fetcher (curl)" gebaut wurde, heißt dann im Klartext, strongswan kann die http URL für die OCSP-Validierunge nicht abrufen was sich auch im IPSec-Log zeigt:
2023-02-01T12:49:29 Informational charon 11[CFG] <con2|3> certificate status is not available
2023-02-01T12:49:29 Informational charon 11[CFG] <con2|3> ocsp check failed, fallback to crl
2023-02-01T12:49:29 Informational charon 11[CFG] <con2|3> ocsp request to http://192.168.50.1:8080 failed
2023-02-01T12:49:29 Informational charon 11[LIB] <con2|3> unable to fetch from http://192.168.50.1:8080, no capable fetcher found
2023-02-01T12:49:29 Informational charon 11[CFG] <con2|3> requesting ocsp status from 'http://192.168.50.1:8080' ...
2023-02-01T12:49:29 Informational charon 11[CFG] <con2|3> checking certificate status of "C=DE, ST=XXX, L=XXXX, O=private, E=userA@opnsense.tld, CN=userA"
Könnte man zwar seine eigene strongswan bauen und einpflanzen, das ist aber für Otto-Normalo nicht so einfach zu bewerkstelligen.
Beleibt also CRL oder Radius.
Die in die GUI integrierte CRL-Verwaltung hinterlegt die CRLs leider nicht im Strongswan-Verzeichnis, so das diese dort nicht berücksichtigt werden.
Hier könnte man die CRL selbst generieren und nach
/usr/local/etc/swanctl/x509crl
auf die OPNSense kopieren und dann mittels Shell-Befehl swanctl -s
aktualisieren lassen.Danach sind die dort enthaltenen zurückgezogenen Zertifikate gesperrt.
Alles in allem doch noch eine ziemliche Bastelei auf der OPNSense. Ich würde hier auf einen Radius (z.B. Onboard Freeradius via Plugin) ausweichen dann entgeht man diesem Gebastel auf der OPNSense und der Radius übernimmt die Validierung der Zertifikate etc . und dieser kann die CRL die man im Webinterface anlegen kann auch nutzen
Hth
Grüße Uwe
Hier mal das IPSec Beispiel-Setup mit dem Freeradius Package auf der OPNSense
Ohne jetzt deine IPSec Settings zu wiederholen, also nur die Settings für die Umstellung auf Radius-Authentication mit Zertifikaten über EAP-TLS.Freeradius Plugin (os-freeradius) installieren
Freeradius aktivieren
Radius Client anlegen (localhost)
EAP Settings setzen
Radius Authentication Backend erstellen
IPSec Phase 1 Settings auf Radius Authentication Backend umstellen
Der Rest von den IPSec-Settings kann gleich bleiben.
Man beachte den wichtigen Hinweis wenn man die CRL aktualisiert hat (also ein neues Zertifikat revoked hat)