StrongSwan IKEv2 + Windows 7 Agile VPN:導致錯誤 13801 的原因

StrongSwan IKEv2 + Windows 7 Agile VPN:導致錯誤 13801 的原因

我有一個 AWS 實例,我想將其用作 VPN 伺服器。它將 Windows 7 用戶端連接到 Amazon 雲端中的專用網路。

  • 我已經安裝了 Ubuntu 12.04 和軟體包strongswan-ikev2
  • ipsec version報告Linux strongSwan U4.5.2/K3.2.0-52-virtual
  • 請注意,客戶端和伺服器都位於 NAT 之後(客戶端是因為它位於本地辦公室網路上,伺服器是因為它位於 Amazon 的雲端中)。我在 Amazon 儀表板和用戶端防火牆上都解鎖了 UDP 連接埠 500 和 4500。
  • 這是/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
    
  • 這是/etc/ipsec.secrets:

    : RSA openssl-key.rsa
    TESTDOMAIN\testuser : EAP "testpassword"
    
  • 我已將簽署伺服器主機憑證的 CA 憑證新增至本機(而非使用者)憑證儲存體中,以便 Windows 可以對伺服器進行驗證。

然後我嘗試按照規定使用 Windows 7 用戶端連接到伺服器這裡,但有一個例外 - 我使用的是 DNS 名稱而不是 IP 位址。我在 ipsec.secrets 檔案中輸入使用者名稱、網域和密碼,然後它嘗試連線。

當它出現時,我會得到如下所示的 StrongSwan 日誌。為了審查和清晰度,我對這些內容進行了一些修改; CLIENTPUB/CLIENTPRIV 是客戶端的公用和私人 IP 位址,AMAZONPRIV 是伺服器的私人 IP 位址(這是伺服器的公用 IP - 亞馬遜稱之為「彈性 IP」 - 轉送的位址)。

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]

此時,Windows立即彈出錯誤訊息:

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

幾秒鐘後,charon 再次嘗試,然後關閉連線。

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

就是這樣。

據我所知,我正在關注所有指示在 StrongSwan 維基上。

我在這裡做錯了什麼?

編輯:這絕對是證書的問題。我透過編輯註冊表並重新啟動來停用擴展驗證檢查,如 MSKB926182 中所述(哈哈,如果您想要該連結),現在我可以毫無錯誤地連接到我的 VPN 伺服器。我將弄清楚如何產生滿足要求的證書並添加答案。感謝 @ecdsa 指向 StrongSwan wiki 上的證書頁面的指針,它讓我指明了正確的方向。

答案1

想通了這一點。 @ecdsa 為我指明了正確的方向,我終於能夠透過以下方式解決問題本指南

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

關於錯誤

錯誤訊息為“錯誤 13801:IKE 身份驗證憑證不可接受”,其中響起就像我的用戶憑證不起作用一樣。然而,這是一條關於身份驗證的訊息伺服器,這是透過伺服器的 SSL 憑證完成的(根據我的配置)。微軟已經發布了相關文檔排除 IKEv2 VPN 連線故障列出了此錯誤的可能原因:

  • 證書已過期。
  • 客戶端上不存在憑證的受信任根。
  • 證書的使用者名稱與遠端電腦不符。
  • 此憑證未指派所需的增強型金鑰用法 (EKU) 值。

就我而言,我的問題與 EKU 值有關。按照我在頂部連結的指南,我能夠產生具有正確 EKU 值的證書,並且效果很好。

要解決此問題,您可以在 Windows 用戶端上停用 EKU 檢查(當然,這應該僅用於測試):

  • 發射regedit
  • 導航HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\RasMan\Parameters
  • 新增一個名為 的 DWORD DisableIKENameEkuCheck,並將其值設為1
  • Microsoft 文件指示您在執行此操作後重新啟動,但我不需要這樣做才能生效。

答案2

我遇到了同樣的問題,並透過確保憑證檔案中包含憑證鏈(最終實體憑證、中間 CA、根 CA - 按此順序)來解決它。 TLS 很有趣。

重新啟動 StrongSwan 後,它停止工作,但當我將中間 CA 和根 CA 放入/etc/ipsec.d/cacerts.

答案3

經過長時間的搜索,這個帖子得到了我的 Windows Phone 10 (WP10) 配置與 IKEv2 的配合!需要提到的一件事可能是,您必須使用--enable-eap-identity --enable-eap-mschapv2 --enable-openssl (可能還有--enable-dhcp) ./configure Strongswan 才能擁有必要的插件。是的,您需要獲得正確的憑證(在伺服器端 - 客戶端只需要知道伺服器的根 CA)。

相關內容