strongSwan IKEv2 + VPN ágil do Windows 7: o que está causando o erro 13801

8

Eu tenho uma instância da AWS que desejo ser um servidor VPN. Ele conectará os clientes do Windows 7 a uma rede privada na nuvem da Amazon.

  • Eu instalei o Ubuntu 12.04 e o pacote strongswan-ikev2 .
  • ipsec version relatórios Linux strongSwan U4.5.2/K3.2.0-52-virtual
  • Observe que o cliente e o servidor estão por trás do NAT (o cliente porque ele está em uma rede de escritório local e o servidor porque está na nuvem da Amazon). Desbloqueei as portas UDP 500 e 4500 no painel da Amazon e no firewall do cliente.
  • Isso é /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
    
  • Isso é /etc/ipsec.secrets:

    : RSA openssl-key.rsa
    TESTDOMAIN\testuser : EAP "testpassword"
    
  • Eu adicionei o certificado de CA que assinou o certificado de host do servidor no armazenamento de certificados de máquina local (não de usuário) para que o Windows possa autenticar o servidor.

Eu, então, tento me conectar ao servidor usando o cliente do Windows 7 conforme aqui , com um exceção - estou usando o nome DNS em vez do endereço IP. Eu insiro o nome de usuário, domínio e senha no meu arquivo ipsec.secrets, e ele tenta se conectar.

Quando isso acontece, recebo logs StrongSwan que se parecem com isso. Munged estes um pouco para a censura e clareza; CLIENTPUB / CLIENTPRIV são os endereços IP públicos e privados do cliente e AMAZONPRIV é o endereço IP privado do servidor (que é o que o IP público do servidor - o Amazon chama de "Elastic IP" - encaminha para).

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]

Neste ponto, o Windows exibe uma mensagem de erro imediatamente:

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

Após alguns segundos, o charon tenta novamente e fecha a conexão.

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

E é isso.

Até onde eu sei, estou seguindo todas as instruções no wiki strongSwan .

O que estou fazendo de errado aqui?

Edit: este é definitivamente um problema com certificados. Desativei as verificações de validação estendidas editando o registro e reinicializando conforme descrito em MSKB926182 (lol se você quiser um link para isso) e agora posso me conectar ao servidor VPN sem erros. Eu vou descobrir como gerar certificados que satisfaçam os requisitos e adicionar uma resposta. Obrigado a @ecdsa pelo ponteiro para a página do certificado no wiki strongSwan que me apontou na direção certa.

    
por Micah R Ledbetter 04.09.2013 / 02:35

3 respostas

5

Descobri isso. @ecdsa apontou na direção certa, e finalmente consegui resolver o problema seguindo este guia .

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 o erro

A mensagem de erro era "Erro 13801: credenciais de autenticação IKE são inaceitáveis", o que soou como se minhas credenciais de usuário não estivessem funcionando. No entanto, esta é uma mensagem sobre a autenticação do servidor , que é feita (por minha configuração) pelo certificado SSL do servidor. A Microsoft publicou a documentação sobre Solução de problemas de conexões VPN IKEv2 , que lista possíveis causas para este erro:

  • O certificado expirou.
  • A raiz confiável do certificado não está presente no cliente.
  • O nome da entidade do certificado não corresponde ao computador remoto.
  • O certificado não possui os valores EKU (Enhanced Key Usage) necessários atribuídos.

No meu caso, meu problema tinha a ver com os valores EKU. Seguindo o guia que eu vinculei no topo, consegui gerar um certificado com os valores corretos de EKU e funcionou muito bem.

Para solucionar isso, você pode desabilitar a verificação do EKU no seu cliente Windows (é claro que isso só deve ser feito para testes):

  • Iniciar regedit
  • Navegue até HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\RasMan\Parameters
  • Adicione um DWORD chamado DisableIKENameEkuCheck e defina seu valor como 1
  • A documentação da Microsoft instrui você a reiniciar depois de fazer isso, mas não precisei fazer isso para que isso fosse efetivado.
por 09.09.2013 / 19:42
2

Eu tive um problema idêntico e resolvi isso garantindo que eu tivesse a cadeia de certificados no arquivo de certificado (certificado de entidade final, CA intermediária, CA raiz - nessa ordem). O TLS é divertido.

Depois de reiniciar o strongSwan, isso parou de funcionar, mas começou a funcionar novamente quando eu deixei a CA intermediária e raiz em /etc/ipsec.d/cacerts .

    
por 25.02.2015 / 09:11
0

Após uma longa pesquisa, este thread conseguiu a minha configuração do Windows Phone 10 (WP10) funcionar com o IKEv2! Uma coisa a ser mencionada pode ser que você tenha que ./configure seu Strongswan com --enable-eap-identity --enable-eap-mschapv2 --enable-openssl (e provavelmente --enable-dhcp) para ter os plugins necessários. E sim, você precisa acertar as certs (no lado do servidor - o cliente só precisa saber a CA raiz do servidor).

    
por 17.01.2017 / 18:57