strongSwan IKEv2 + Windows 7 Agile VPN: Was verursacht Fehler 13801

strongSwan IKEv2 + Windows 7 Agile VPN: Was verursacht Fehler 13801

Ich habe eine AWS-Instanz, die ich als VPN-Server nutzen möchte. Sie verbindet Windows 7-Clients mit einem privaten Netzwerk in der Amazon-Cloud.

  • Ich habe Ubuntu 12.04 und das strongswan-ikev2Paket installiert.
  • ipsec versionBerichteLinux strongSwan U4.5.2/K3.2.0-52-virtual
  • Beachten Sie, dass sich sowohl der Client als auch der Server hinter NAT befinden (der Client, weil er sich in einem lokalen Büronetzwerk befindet, und der Server, weil er sich in der Cloud von Amazon befindet). Ich habe die UDP-Ports 500 und 4500 sowohl auf dem Amazon-Dashboard als auch in der Firewall des Clients entsperrt.
  • Dies ist /etc/ipsec.conf:

    config setup
        plutostart=no
    
    conn %default
        keyexchange=ikev2
        ike=aes256-sha1-modp1024!
        esp=aes256-sha1!
        dpdaction=clear
        dpddelay=300s
        rekey=no
    
    conn win7vpn
        left=%any
        leftsubnet=<amazon VPC CIDR block>
        leftauth=pubkey
        leftcert=openssl-cert.pem
        leftid=<vpn server public dns name>
        right=%any
        rightsourceip=<amazon private IP address, which elastic ip is forwarded to>
        rightauth=eap-mschapv2
        rightsendcert=never
        eap_identity=%any
        auto=add
    
  • Dies ist /etc/ipsec.secrets:

    : RSA openssl-key.rsa
    TESTDOMAIN\testuser : EAP "testpassword"
    
  • Ich habe das CA-Zertifikat, das das Host-Zertifikat des Servers signiert hat, zum Zertifikatsspeicher des lokalen Computers (nicht des Benutzers) hinzugefügt, damit Windows den Server authentifizieren kann.

Ich versuche dann, wie vorgeschrieben, über den Windows 7-Client eine Verbindung zum Server herzustellenHier, mit einer Ausnahme – ich verwende den DNS-Namen statt der IP-Adresse. Ich gebe den Benutzernamen, die Domäne und das Passwort in meine ipsec.secrets-Datei ein und es wird versucht, eine Verbindung herzustellen.

Wenn dies der Fall ist, erhalte ich StrongSwan-Protokolle, die so aussehen. Ich habe diese ein wenig verändert, um sie zu zensieren und verständlicher zu machen. CLIENTPUB/CLIENTPRIV sind die öffentlichen und privaten IP-Adressen des Clients und AMAZONPRIV ist die private IP-Adresse des Servers (an die die öffentliche IP des Servers – Amazon nennt dies eine „Elastic IP“ – weiterleitet).

Sep  4 00:16:17 localhost charon: 14[IKE] CLIENTPUB is initiating an IKE_SA
Sep  4 00:16:17 localhost charon: 14[NET] received packet: from CLIENTPUB[500] to AMAZONPRIV[500]
Sep  4 00:16:17 localhost charon: 14[ENC] parsed IKE_SA_INIT request 0 [ SA KE No N(NATD_S_IP) N(NATD_D_IP) ]
Sep  4 00:16:17 localhost charon: 14[IKE] CLIENTPUB is initiating an IKE_SA
Sep  4 00:16:17 localhost charon: 14[IKE] local host is behind NAT, sending keep alives
Sep  4 00:16:17 localhost charon: 14[IKE] remote host is behind NAT
Sep  4 00:16:17 localhost charon: 14[ENC] generating IKE_SA_INIT response 0 [ SA KE No N(NATD_S_IP) N(NATD_D_IP) N(MULT_AUTH) ]
Sep  4 00:16:17 localhost charon: 14[NET] sending packet: from AMAZONPRIV[500] to CLIENTPUB[500]
Sep  4 00:16:17 localhost charon: 15[NET] received packet: from CLIENTPUB[4500] to AMAZONPRIV[4500]
Sep  4 00:16:17 localhost charon: 15[ENC] unknown attribute type INTERNAL_IP4_SERVER
Sep  4 00:16:17 localhost charon: 15[ENC] parsed IKE_AUTH request 1 [ IDi CERTREQ N(MOBIKE_SUP) CP(ADDR DNS NBNS SRV) SA TSi TSr ]
Sep  4 00:16:17 localhost charon: 15[IKE] received cert request for "C=US, ST=TX, O=Test CA, CN=Test CA"
Sep  4 00:16:17 localhost charon: 15[IKE] received 316 cert requests for an unknown ca
Sep  4 00:16:17 localhost charon: 15[CFG] looking for peer configs matching AMAZONPRIV[%any]...CLIENTPUB[CLIENTPRIV]
Sep  4 00:16:17 localhost charon: 15[CFG] selected peer config 'dlpvpn'
Sep  4 00:16:17 localhost charon: 15[IKE] initiating EAP-Identity request
Sep  4 00:16:17 localhost charon: 15[IKE] peer supports MOBIKE
Sep  4 00:16:17 localhost charon: 15[IKE] authentication of 'C=US, ST=TX, O=DLP Test CA, CN=vpn.example.com' (myself) with RSA signature successful
Sep  4 00:16:17 localhost charon: 15[IKE] sending end entity cert "C=US, ST=TX, O=DLP Test CA, CN=vpn.example.com"
Sep  4 00:16:17 localhost charon: 15[ENC] generating IKE_AUTH response 1 [ IDr CERT AUTH EAP/REQ/ID ]
Sep  4 00:16:17 localhost charon: 15[NET] sending packet: from AMAZONPRIV[4500] to CLIENTPUB[4500]

An diesem Punkt zeigt Windows sofort eine Fehlermeldung an:

Verifying user name and password...
Error 13801: IKE authentication credentials are unacceptable

Nach einigen Sekunden versucht Charon es erneut und schließt dann die Verbindung.

Sep  4 00:16:37 localhost charon: 16[IKE] sending keep alive
Sep  4 00:16:37 localhost charon: 16[NET] sending packet: from AMAZONPRIV[4500] to CLIENTPUB[4500]
Sep  4 00:16:47 localhost charon: 03[JOB] deleting half open IKE_SA after timeout

Und das ist es.

Soweit ich das beurteilen kann, folge ich allenAnweisungenim StrongSwan-Wiki.

Was mache ich hier falsch?

Bearbeiten: Dies ist definitiv ein Problem mit Zertifikaten. Ich habe die erweiterten Validierungsprüfungen deaktiviert, indem ich die Registrierung bearbeitet und neu gestartet habe, wie in MSKB926182 beschrieben (lol, wenn Sie einen Link dazu wollten), und ich kann mich jetzt ohne Fehler mit meinem VPN-Server verbinden. Ich werde herausfinden, wie man Zertifikate generiert, die die Anforderungen erfüllen, und eine Antwort hinzufügen. Danke an @ecdsa für den Hinweis auf die Zertifikatsseite im StrongSwan-Wiki, der mich in die richtige Richtung gelenkt hat.

Antwort1

Das habe ich herausgefunden. @ecdsa hat mich in die richtige Richtung gelenkt und ich konnte das Problem schließlich lösen, indem ichdieser Leitfaden.

ipsec pki --gen --type rsa --size 4096 --outform pem > vpnca.key.pem
ipsec pki --self --flag serverAuth --in vpnca.key.pem --type rsa --digest sha1 \
    --dn "C=US, O=Example Company, CN=Example VPN CA" --ca > vpnca.crt.der
ipsec pki --gen --type rsa --size 4096 --outform pem > vpn.example.com.key.pem
ipsec pki --pub --in vpn.example.com.key.pem --type rsa > vpn.example.com.csr
ipsec pki --issue --cacert vpnca.crt.der --cakey vpnca.key.pem --digest sha1 \
    --dn "C=US, O=Example Company, CN=vpn.example.com" \
    --san "vpn.example.com" --flag serverAuth --outform pem \
    < vpn.example.com.csr > vpn.example.com.crt.pem 
openssl rsa -in vpn.example.com.key.pem -out vpn.example.com.key.der -outform DER

cp vpnca.crt.der /etc/ipsec.d/cacerts
cp vpn.example.com.crt.pem /etc/ipsec.d/certs
cp vpn.example.com.key.der /etc/ipsec.d/private

Über den Fehler

Die Fehlermeldung lautete "Fehler 13801: IKE-Authentifizierungsdaten sind nicht akzeptabel", wasklangals ob meine Benutzeranmeldeinformationen nicht funktionierten. Dies ist jedoch eine Nachricht über die Authentifizierungder Kellner, was (gemäß meiner Konfiguration) durch das SSL-Zertifikat des Servers erfolgt. Microsoft hat eine Dokumentation zuFehlerbehebung bei IKEv2-VPN-VerbindungenDort sind die möglichen Ursachen für diesen Fehler aufgelistet:

  • Das Zertifikat ist abgelaufen.
  • Die vertrauenswürdige Stammadresse für das Zertifikat ist auf dem Client nicht vorhanden.
  • Der Betreffname des Zertifikats stimmt nicht mit dem Remotecomputer überein.
  • Dem Zertifikat sind nicht die erforderlichen Enhanced Key Usage (EKU)-Werte zugewiesen.

In meinem Fall hatte mein Problem mit den EKU-Werten zu tun. Mithilfe der Anleitung, die ich oben verlinkt habe, konnte ich ein Zertifikat mit den richtigen EKU-Werten erstellen, und es funktionierte einwandfrei.

Um dieses Problem zu beheben, können Sie die EKU-Prüfung auf Ihrem Windows-Client deaktivieren (dies sollte natürlich nur zu Testzwecken erfolgen):

  • Startregedit
  • Navigieren Sie zuHKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\RasMan\Parameters
  • Fügen Sie ein DWORD mit dem Namen hinzu DisableIKENameEkuCheckund setzen Sie seinen Wert auf1
  • In der Microsoft-Dokumentation wird angegeben, dass Sie im Anschluss an diesen Vorgang einen Neustart durchführen müssen. Dies war bei mir jedoch nicht nötig, damit die Änderung wirksam wurde.

Antwort2

Ich hatte ein identisches Problem und habe es gelöst, indem ich sichergestellt habe, dass ich die Zertifikatskette in der Zertifikatsdatei hatte (Endentitätszertifikat, Zwischenzertifizierungsstelle, Stammzertifizierungsstelle – in dieser Reihenfolge). TLS macht Spaß.

Nach dem Neustart von strongSwan funktionierte dies nicht mehr, funktionierte aber wieder, als ich die Zwischen- und Stammzertifizierungsstelle in abgelegt habe /etc/ipsec.d/cacerts.

Antwort3

Nach langer Suche hat dieser Thread meine Windows Phone 10 (WP10)-Konfiguration mit IKEv2 zum Laufen gebracht! Erwähnenswert wäre, dass Sie Ihr Strongswan mit --enable-eap-identity --enable-eap-mschapv2 --enable-openssl (und wahrscheinlich --enable-dhcp) konfigurieren müssen, um die erforderlichen Plugins zu haben. Und ja, Sie müssen die Zertifikate richtig einrichten (auf der Serverseite – der Client muss nur die Stammzertifizierungsstelle des Servers kennen).

verwandte Informationen