strongSwan IKEv2 + Windows 7 Agile VPN: qué está causando el error 13801

8

Tengo una instancia de AWS que quiero ser un servidor VPN. Conectará clientes de Windows 7 a una red privada en la nube de Amazon.

  • He instalado Ubuntu 12.04 y el strongswan-ikev2paquete.
  • ipsec version informes Linux strongSwan U4.5.2/K3.2.0-52-virtual
  • Tenga en cuenta que tanto el cliente como el servidor están detrás de NAT (el cliente porque está en la red de una oficina local y el servidor porque está en la nube de Amazon). He desbloqueado los puertos UDP 500 y 4500 tanto en el tablero de Amazon como en el firewall del cliente.
  • Esto es /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
    
  • Esto es /etc/ipsec.secrets:

    : RSA openssl-key.rsa
    TESTDOMAIN\testuser : EAP "testpassword"
    
  • He agregado el certificado de CA que firmó el certificado de host del servidor al almacén de certificados de la máquina local (no del usuario) para que Windows pueda autenticar el servidor.

Luego trato de conectarme al servidor usando el cliente de Windows 7 como se prescribe aquí , con una excepción: estoy usando el nombre DNS en lugar de la dirección IP. Ingreso el nombre de usuario, el dominio y la contraseña en mi archivo ipsec.secrets, y trata de conectarse.

Cuando lo hace, obtengo fuertes registros de Swan que se ven así. Lo critiqué un poco por censura y claridad; CLIENTPUB / CLIENTPRIV son las direcciones IP públicas y privadas del cliente y AMAZONPRIV es la dirección IP privada del servidor (que es lo que la IP pública del servidor, Amazon llama a esto una "IP elástica", reenvía).

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]

En este punto, Windows muestra un mensaje de error de inmediato:

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

Después de unos segundos, Charon lo intenta nuevamente y luego cierra la conexión.

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

Y eso es.

Por lo que puedo decir, estoy siguiendo todas las instrucciones en la wiki de strongSwan.

¿Qué estoy haciendo mal aquí?

Editar: este es definitivamente un problema con los certificados. Deshabilité las verificaciones de validación extendidas editando el registro y reiniciando como se describe en MSKB926182 (jajaja si querías un enlace a eso) y ahora puedo conectarme a mi servidor VPN sin errores. Descubriré cómo generar certificados que satisfagan los requisitos y agregaré una respuesta. Gracias a @ecdsa por el puntero a la página de certificación en la wiki de strongSwan que me hizo apuntar en la dirección correcta.

Micah R Ledbetter
fuente
¿Cómo se ve la pestaña de seguridad de las propiedades de VPN en el cliente de Windows 7? Además, aunque mi configuración no es idéntica, tengo IKEv2 trabajando con los certificados en el almacén de certificados de Usuario actual.
0xFE
¿Su certificado de servidor cumple con todos los requisitos ?
ecdsa
Si resolvió su propio problema, considere publicar una respuesta a continuación y márquela como resuelta.
Michael Hampton

Respuestas:

6

Me di cuenta de esto. @ecdsa me señaló en la dirección correcta, y finalmente pude resolver el problema siguiendo esta guía .

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

Sobre el error

El mensaje de error fue "Error 13801: las credenciales de autenticación IKE son inaceptables", que sonaba como si mis credenciales de usuario no funcionaran. Sin embargo, este es un mensaje sobre la autenticación del servidor , que se realiza (según mi configuración) mediante el certificado SSL del servidor. Microsoft ha publicado documentación sobre Solución de problemas de conexiones VPN IKEv2 que enumera las posibles causas de este error:

  • El certificado ha expirado.
  • La raíz de confianza para el certificado no está presente en el cliente.
  • El nombre del sujeto del certificado no coincide con la computadora remota.
  • El certificado no tiene asignados los valores requeridos de Uso mejorado de clave (EKU).

En mi caso, mi problema tenía que ver con los valores de EKU. Siguiendo la guía que vinculé en la parte superior, pude generar un certificado con los valores EKU correctos, y funcionó muy bien.

Para solucionar este problema, puede deshabilitar la comprobación de EKU en su cliente de Windows (por supuesto, esto solo debe hacerse para realizar pruebas):

  • Lanzamiento regedit
  • Navegar a HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\RasMan\Parameters
  • Agregue un DWORD llamado DisableIKENameEkuChecky establezca su valor en1
  • La documentación de Microsoft le indica que reinicie después de hacer esto, pero no fue necesario para que esto surta efecto.
Micah R Ledbetter
fuente
Otra posible causa: IP se usa en cert, pero el nombre de host se usa en el cliente.
Larsen
o el nombre de host está en el certificado, pero el cliente se conecta a su dirección IP. Solución:ipsec pki --isue ... --san @ipaddress
Bouke
Después de seguir estos pasos, finalmente mi problema fue que la raíz de confianza se instaló en el lugar incorrecto, debería estar en "Computadora \ Autoridades de certificación de raíz de confianza", no en "Usuario actual \ TRCA".
bouke
2

Tuve un problema idéntico y lo resolví asegurándome de tener la cadena de certificados en el archivo del certificado (certificado de entidad final, CA intermedia, CA raíz, en ese orden). TLS es divertido.

Después de reiniciar strongSwan, esto dejó de funcionar, pero comenzó a funcionar nuevamente cuando solté la CA intermedia y la raíz /etc/ipsec.d/cacerts.

Zanchey
fuente
0

¡Después de una larga búsqueda, este hilo consiguió que mi configuración de Windows Phone 10 (WP10) funcionara con IKEv2! Una cosa a mencionar podría ser que tiene que ./configurar su Strongswan con --enable-eap-identity --enable-eap-mschapv2 --enable-openssl (y probablemente --enable-dhcp) para tener los complementos necesarios. Y sí, debe obtener los certificados correctos (en el lado del servidor; el cliente solo necesita conocer la CA raíz del servidor).

Martín
fuente