![strongSwan IKEv2 + Windows 7 Agile VPN: O que está causando o erro 13801](https://rvso.com/image/617286/strongSwan%20IKEv2%20%2B%20Windows%207%20Agile%20VPN%3A%20O%20que%20est%C3%A1%20causando%20o%20erro%2013801.png)
Tenho uma instância da AWS que quero que seja um servidor VPN. Ele conectará clientes Windows 7 a uma rede privada na nuvem Amazon.
- Eu instalei o Ubuntu 12.04 e o
strongswan-ikev2
pacote. ipsec version
relatóriosLinux strongSwan U4.5.2/K3.2.0-52-virtual
- Observe que tanto o cliente quanto o servidor estão atrás de NAT (o cliente porque está em uma rede local do escritório 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.
Este é /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
Este é /etc/ipsec.secrets:
: RSA openssl-key.rsa TESTDOMAIN\testuser : EAP "testpassword"
Adicionei o certificado CA que assinou o certificado de host do servidor ao armazenamento de certificados da máquina local (não do usuário) para que o Windows possa autenticar o servidor.
Em seguida, tento me conectar ao servidor usando o cliente Windows 7 conforme prescritoaqui, com uma exceção: estou usando o nome DNS em vez do endereço IP. Eu insiro o nome de usuário, domínio e senha em meu arquivo ipsec.secrets e ele tenta se conectar.
Quando isso acontece, recebo logs do StrongSwan parecidos com estes. Eu usei isso um pouco para 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 é para onde o IP público do servidor - a Amazon chama isso de "IP Elástico" - encaminha).
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, 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.
Pelo que posso dizer, estou seguindo todas asinstruçõesno wiki do StrongSwan.
O que estou fazendo de errado aqui?
Editar: este é definitivamente um problema com certificados. Desativei as verificações de validação estendidas editando o registro e reiniciando conforme descrito em MSKB926182 (risos, se você quiser um link para isso) e agora posso me conectar ao meu servidor VPN sem erros. Descobrirei como gerar certificados que atendam aos requisitos e adicionarei uma resposta. Obrigado a @ecdsa pela indicação da página do certificado no wiki do StrongSwan que me apontou na direção certa.
Responder1
Descobri isso. @ecdsa me indicou a direção certa e finalmente consegui resolver o problema seguindoeste 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", quesooucomo se minhas credenciais de usuário não estivessem funcionando. No entanto, esta é uma mensagem sobre autenticaçãoo servidor, o que é feito (de acordo com minha configuração) pelo certificado SSL do servidor. A Microsoft publicou documentação sobreSolução de problemas de conexões VPN IKEv2que lista as possíveis causas para esse erro:
- O certificado expirou.
- A raiz confiável do certificado não está presente no cliente.
- O nome do assunto do certificado não corresponde ao computador remoto.
- O certificado não tem os valores necessários de uso de chave aprimorada (EKU) atribuídos.
No meu caso, meu problema tinha a ver com os valores de EKU. Seguindo o guia que linkei na parte superior, consegui gerar um certificado com os valores EKU corretos e funcionou muito bem.
Para solucionar isso, você pode desabilitar a verificação de EKU em seu cliente Windows (é claro, isso só deve ser feito para teste):
- Lançar
regedit
- Navegar para
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\RasMan\Parameters
- Adicione um DWORD chamado
DisableIKENameEkuCheck
e defina seu valor como1
- A documentação da Microsoft instrui você a reiniciar depois de fazer isso, mas não foi necessário para que isso entrasse em vigor.
Responder2
Eu tive um problema idêntico e resolvi-o garantindo que tinha a cadeia de certificados no arquivo de certificado (certificado da entidade final, CA intermediária, CA raiz - nessa ordem). TLS é divertido.
Depois de reiniciar o StrongSwan, isso parou de funcionar, mas começou a funcionar novamente quando coloquei a CA intermediária e raiz no /etc/ipsec.d/cacerts
.
Responder3
Depois de uma longa pesquisa, este tópico fez com que minha configuração do Windows Phone 10 (WP10) funcionasse com IKEv2! Uma coisa a mencionar pode ser que você precisa ./configurar 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 os certificados (no lado do servidor - o cliente só precisa saber a CA raiz do servidor).