strongSwan IKEv2 + Windows 7 Agile VPN: Apa yang menyebabkan Kesalahan 13801

8

Saya memiliki instance AWS yang saya ingin menjadi server VPN. Ini akan menghubungkan klien Windows 7 ke jaringan pribadi di cloud Amazon.

  • Saya telah menginstal Ubuntu 12.04 dan strongswan-ikev2paketnya.
  • ipsec version laporan Linux strongSwan U4.5.2/K3.2.0-52-virtual
  • Perhatikan bahwa klien dan server berada di belakang NAT (klien karena berada di jaringan kantor lokal, dan server karena berada di cloud Amazon). Saya telah membuka port UDP 500 dan 4500 di dashboard Amazon dan firewall klien.
  • Ini adalah /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
    
  • Ini adalah /etc/ipsec.secrets:

    : RSA openssl-key.rsa
    TESTDOMAIN\testuser : EAP "testpassword"
    
  • Saya telah menambahkan sertifikat CA yang menandatangani sertifikat host server ke toko sertifikat mesin lokal (bukan pengguna) sehingga Windows dapat mengautentikasi server.

Saya kemudian mencoba untuk terhubung ke server menggunakan klien Windows 7 seperti yang ditentukan di sini , dengan satu pengecualian - Saya menggunakan nama DNS daripada alamat IP. Saya memasukkan nama pengguna, domain, dan kata sandi dalam file rahasia ipsec.sec saya, dan mencoba untuk terhubung.

Ketika itu terjadi, saya mendapatkan log StrongSwan yang terlihat seperti ini. Saya membuat ini sedikit untuk sensor dan kejelasan; CLIENTPUB / CLIENTPRIV adalah alamat IP publik dan pribadi klien dan AMAZONPRIV adalah alamat IP pribadi server (yang merupakan IP publik server - Amazon menyebutnya sebagai "IP Elastis" - meneruskan ke).

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]

Pada titik ini, Windows segera memunculkan pesan kesalahan:

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

Setelah beberapa detik, charon mencoba lagi dan kemudian menutup koneksi.

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

Dan itu saja.

Sejauh yang saya tahu, saya mengikuti semua instruksi pada wiki StrongSwan.

Apa yang saya lakukan salah di sini?

Sunting: ini jelas merupakan masalah dengan sertifikat. Saya menonaktifkan pemeriksaan validasi diperpanjang dengan mengedit registri dan me-reboot seperti yang dijelaskan dalam MSKB926182 (lol jika Anda menginginkan tautan ke sana) dan sekarang saya dapat terhubung ke server VPN saya tanpa kesalahan. Saya akan mencari cara untuk menghasilkan sertifikat yang memenuhi persyaratan dan menambahkan jawaban. Terima kasih kepada @ecdsa untuk penunjuk ke halaman cert pada wiki strongSwan yang membuat saya menunjuk ke arah yang benar.

Micah R Ledbetter
sumber
Seperti apa tab keamanan properti VPN pada klien Windows 7? Selain itu, walaupun pengaturan saya tidak identik, saya memiliki IKEv2 yang bekerja dengan sertifikat di toko sertifikat Pengguna Saat Ini.
0xFE
Apakah sertifikat server Anda memenuhi semua persyaratan ?
ecdsa
Jika Anda memecahkan masalah Anda sendiri, pertimbangkan untuk mengirim jawaban di bawah ini dan menandainya sebagai pemecahan.
Michael Hampton

Jawaban:

6

Menemukan ini. @ecdsa menunjuk saya ke arah yang benar, dan saya akhirnya bisa menyelesaikan masalah dengan mengikuti panduan ini .

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

Tentang kesalahan

Pesan kesalahan adalah "Kesalahan 13801: kredensial otentikasi IKE tidak dapat diterima", yang terdengar seperti kredensial pengguna saya tidak berfungsi. Namun, ini adalah pesan tentang otentikasi server , yang dilakukan (sesuai konfigurasi saya) oleh sertifikat SSL server. Microsoft telah menerbitkan dokumentasi tentang Pemecahan Masalah Koneksi VPN IKEv2 yang mencantumkan kemungkinan penyebab kesalahan ini:

  • Sertifikat telah kedaluwarsa.
  • Root yang tepercaya untuk sertifikat tidak ada pada klien.
  • Nama subjek sertifikat tidak cocok dengan komputer jarak jauh.
  • Sertifikat tidak memiliki nilai Penggunaan Kunci yang Ditingkatkan (EKU) yang diperlukan.

Dalam kasus saya, masalah saya berkaitan dengan nilai-nilai EKU. Mengikuti panduan yang saya tautkan di atas, saya dapat menghasilkan sertifikat dengan nilai EKU yang benar, dan itu berfungsi dengan baik.

Untuk memecahkan masalah ini, Anda dapat menonaktifkan pemeriksaan EKU pada klien Windows Anda (tentu saja, ini hanya dapat dilakukan untuk pengujian):

  • Meluncurkan regedit
  • Navigasi ke HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\RasMan\Parameters
  • Tambahkan DWORD yang dipanggil DisableIKENameEkuCheck, dan atur nilainya menjadi1
  • Dokumentasi Microsoft menginstruksikan Anda untuk reboot setelah melakukan ini, tetapi saya tidak perlu agar ini berlaku.
Micah R Ledbetter
sumber
kemungkinan penyebab lain: IP digunakan dalam cert, tetapi hostname digunakan pada klien.
Larsen
atau nama host ada dalam sertifikat, tetapi klien terhubung ke alamat IP-nya. Solusi:ipsec pki --isue ... --san @ipaddress
bouke
Setelah mengikuti langkah-langkah ini, akhirnya masalah saya adalah bahwa root tepercaya dipasang di tempat yang salah, seharusnya berada di "Otoritas Sertifikasi Akar Tepercaya Komputer", bukan dalam "Pengguna Saat Ini \ TRCA".
bouke
2

Saya memiliki masalah yang sama dan menyelesaikannya dengan memastikan saya memiliki rantai sertifikat di file sertifikat (sertifikat entitas akhir, CA perantara, root CA - dalam urutan itu). TLS itu menyenangkan.

Setelah restart strongSwan, ini berhenti bekerja, tetapi mulai bekerja lagi ketika saya menjatuhkan menengah dan akar CA ke dalam /etc/ipsec.d/cacerts.

Zanchey
sumber
0

Setelah pencarian yang panjang, utas ini membuat konfigurasi Windows Phone 10 (WP10) saya berfungsi dengan IKEv2! Satu hal yang perlu disebutkan mungkin adalah Anda harus ./configurasikan Strongswan Anda dengan --enable-eap-identity --enable-eap-mschapv2 --enable-openssl (dan mungkin --enable-dhcp) untuk memiliki plugin yang diperlukan. Dan ya, Anda perlu mendapatkan sertifikat dengan benar (di sisi server - klien hanya perlu mengetahui CA root dari server).

Martin
sumber