Windows-7

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

  • July 25, 2017

我有一個想要成為 VPN 伺服器的 AWS 實例。它將 Windows 7 客戶端連接到亞馬遜雲中的專用網路。

  • 我已經安裝了 Ubuntu 12.04 和strongswan-ikev2軟體包。
  • ipsec version報告Linux strongSwan U4.5.2/K3.2.0-52-virtual
  • 請注意,客戶端和伺服器都位於 NAT 之後(客戶端是因為它位於本地辦公網路上,而伺服器是因為它位於亞馬遜的雲中)。我在 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 wiki 上的所有說明。

我在這裡做錯了什麼?

編輯:這絕對是證書的問題。我通過編輯系統資料庫並按照 MSKB926182 中的說明重新啟動來禁用擴展驗證檢查(如果你想要一個連結,哈哈),我現在可以毫無錯誤地連接到我的 VPN 伺服器。我將弄清楚如何生成滿足要求的證書並添加答案。感謝 @ecdsa 指向 strongSwan wiki 上的證書頁面的指針,它讓我指出了正確的方向。

想通了。@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 證書(根據我的配置)完成的。Microsoft 已發布有關IKEv2 VPN 連接故障排除的文件,其中列出了此錯誤的可能原因:

  • 證書已過期。
  • 客戶端上不存在證書的受信任根。
  • 證書的主題名稱與遠端電腦不匹配。
  • 證書未分配必需的增強型密鑰使用 (EKU) 值。

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

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

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

引用自:https://serverfault.com/questions/536092