Configurando conexão com o WPA2 Enterprise (PEAP / MSCHAPv2) com certificado de dois níveis

4

Por um longo tempo, eu pude usar o NetworkManager + wpa_supplicant como configurado no Debian 7 para conectar a um wireless seguro no trabalho (que é o WPA2 Enterprise, com autenticação PEAP + MSCHAPv2).

Recentemente, quero aumentar a segurança da conexão incorporando o certificado do servidor na configuração de conexão do Network Manager. Eu recebi duas chaves PEM do administrador da rede:

  • radius1.pem - o certificado RADIUS
  • globalsign_intermediary.pem - o certificado intermediário

O certificado RADIUS depende do certificado intermediário de sua autenticidade; e o certificado intermediário depende da CA raiz final da GlobalSign.

Aqui está o meu objetivo : quero que o meu computador portátil verifique a autenticidade do ponto de acesso Wi-Fi sempre que me ligar à rede Wi-Fi. Como coloco esses certs na configuração de conexão ( /etc/NetworkManager/system-connections/THE-AP-NAME file) para que eu possa atingir esse objetivo? Para ser específico: qual arquivo deve ser listado onde (por exemplo, qual arquivo de configuração) e quais etapas adicionais são necessárias para obter os certificados do servidor verificados? Eu estou perguntando isso aqui, já que tudo o que eu encontrei em outro lugar é a verificação do certificado em uma etapa, na qual o certificado provavelmente depende de uma CA raiz bem estabelecida ao invés de uma CA intermediária como no meu caso.

Atualmente, esse é o conteúdo do arquivo de configuração da minha conexão (XXXX e YYYY indicam informações obscurecidas):

[ipv6]
method=ignore

[connection]
id=XXXXXXXXX
uuid=XXXXXXXXX
type=802-11-wireless
timestamp=1436377448

[802-11-wireless-security]
key-mgmt=wpa-eap

[802-11-wireless]
ssid=XXXXXXXXX
mode=infrastructure
seen-bssids=XXXXXXXXX
security=802-11-wireless-security

[802-1x]
eap=peap;
identity=XXXXXXXXX
password=YYYYYYYYY
ca-cert=/etc/NetworkManager/certs/work/globalsign_intermediary.pem
phase2-auth=mschapv2

[ipv4]
method=auto

Como você pode ver, eu estava usando o arquivo de certificado intermediário. Mas isso não estava certo. Também não era certo usar apenas o arquivo de certificado RADIUS. Em ambos os casos, recebi o seguinte erro em syslog :

Jul  8 12:02:37 wirawan1 wpa_supplicant[3638]: wlan0: CTRL-EVENT-EAP-STARTED EAP authentication started
Jul  8 12:02:37 wirawan1 kernel: [3880972.051159] wlan0: Limiting TX power to 20 (20 - 0) dBm as advertised by xx:xx:xx:xx:xx
Jul  8 12:02:37 wirawan1 wpa_supplicant[3638]: wlan0: CTRL-EVENT-EAP-PROPOSED-METHOD vendor=0 method=25
Jul  8 12:02:37 wirawan1 wpa_supplicant[3638]: OpenSSL: tls_connection_ca_cert - Failed to load root certificates error:00000000:lib(0):func(0):reason(0)
Jul  8 12:02:37 wirawan1 wpa_supplicant[3638]: wlan0: CTRL-EVENT-EAP-METHOD EAP vendor 0 method 25 (PEAP) selected
Jul  8 12:02:37 wirawan1 wpa_supplicant[3638]: TLS: Certificate verification failed, error 20 (unable to get local issuer certificate) depth 1 for '/C=BE/O=GlobalSign nv-sa/CN=GlobalSign Organization Validation CA - G2'
Jul  8 12:02:37 wirawan1 wpa_supplicant[3638]: wlan0: CTRL-EVENT-EAP-TLS-CERT-ERROR reason=1 depth=1 subject='/C=BE/O=GlobalSign nv-sa/CN=GlobalSign Organization Validation CA - G2' err='unable to get local issuer certificate'
Jul  8 12:02:37 wirawan1 wpa_supplicant[3638]: SSL: SSL3 alert: write (local SSL3 detected an error):fatal:unknown CA
Jul  8 12:02:37 wirawan1 wpa_supplicant[3638]: OpenSSL: openssl_handshake - SSL_connect error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed
Jul  8 12:02:38 wirawan1 wpa_supplicant[3638]: wlan0: CTRL-EVENT-EAP-FAILURE EAP authentication failed
Jul  8 12:02:40 wirawan1 wpa_supplicant[3638]: wlan0: Authentication with xx:xx:xx:xx:xx timed out.

Aparentemente, a cadeia de confiança não pode ser estabelecida.

O hardware é (lspci):

03:00.0 Network controller: Intel Corporation PRO/Wireless 5100 AGN [Shiloh] Network Connection

Ele usa o driver iwlwifi + iwldvm. Versão do kernel 3.12.9-1~bpo70+1 (2014-02-07) , do pacote backport debian linux-image-3.12-0.bpo.1-amd64 .

Eu não sou novo no Linux, mas realmente não sei como lidar com a segurança x509 e / ou SSL / TLS no Linux, então responda com instruções passo-a-passo. Pesquisando para encontrar a resposta para este problema me deixou frustrado. A documentação do solicitante do WPA é muito concisa ao discutir os certificados de uso na conjunção com o WPA2 Enterprise. E o NetworkManager tem uma documentação ainda pior.

    
por Wirawan Purwanto 08.07.2015 / 21:10

1 resposta

3

Acabei conversando com a TI da organização e resolvi o problema com facilidade. Meu erro consiste em vários erros:

  • incluindo o certificado errado
  • não incluindo o certificado raiz correto
  • não está solicitando os certificados na ordem correta

O arquivo "CA certificate" precisa ser um único arquivo de texto (formato PEM) contendo uma lista de certificados, encadeada em ordem de confiança (menos primeiro confiável, o último mais confiável). O certificado RADIUS não precisa ser incluído (e não deve ser). O certificado RADIUS também tem o menor tempo de vida válido. Temos que incluir os certificados upstream até a raiz certificado para que esta abordagem funcione. No meu caso, a ordem de confiança é assim (do menos para o mais confiável):

RADIUS cert -> intermediary cert -> root cert

Aviso: seu caso pode ser muito diferente. O cara de TI me disse que meu certificado raiz é "GlobalSign Raiz R1 ", que possui o seguinte número de série:

04:00:00:00:00:01:15:4b:5a:c3:94

Eu não teria conseguido localizar isso sem a ajuda dele. Eu baixei o certificado raiz do site da GlobalSign (veja abaixo), então converteu o certificado binário para o formato PEM:

$ openssl x509 -inform der -in Root-R1.crt -out Root-R1.pem

depois encadeou os certificados como root

# cat globalsign_intermediary.pem Root-R1.pem > /etc/NetworkManager/certs/work/all-certs.pem

e incluiu o caminho completo de all-certs.pem no NetworkManager configuração de conexão (por meio da GUI ou editando o arquivo de texto que listei a questão). Agora, reinicie o NetworkManager - na minha caixa debian, isso significa:

# service networkmanager restart

Uma vez reiniciado, pude verificar a autenticidade do AP, conforme indicado no syslog:

Jul  8 16:03:32 wirawan1 wpa_supplicant[3638]: wlan0: CTRL-EVENT-EAP-PROPOSED-METHOD vendor=0 method=25
Jul  8 16:03:32 wirawan1 wpa_supplicant[3638]: wlan0: CTRL-EVENT-EAP-METHOD EAP vendor 0 method 25 (PEAP) selected
Jul  8 16:03:32 wirawan1 wpa_supplicant[3638]: wlan0: CTRL-EVENT-EAP-PEER-CERT depth=2 subject='/C=BE/O=GlobalSign nv-sa/OU=Root CA/CN=GlobalSign Root CA'
Jul  8 16:03:32 wirawan1 wpa_supplicant[3638]: wlan0: CTRL-EVENT-EAP-PEER-CERT depth=1 subject='/C=BE/O=GlobalSign nv-sa/CN=GlobalSign Organization Validation CA - G2'
Jul  8 16:03:32 wirawan1 wpa_supplicant[3638]: wlan0: CTRL-EVENT-EAP-PEER-CERT depth=0 subject='/C=US/XXXXXX (details removed)'
Jul  8 16:03:33 wirawan1 wpa_supplicant[3638]: EAP-MSCHAPV2: Authentication succeeded
Jul  8 16:03:33 wirawan1 wpa_supplicant[3638]: EAP-TLV: TLV Result - Success - EAP-TLV/Phase2 Completed
Jul  8 16:03:33 wirawan1 wpa_supplicant[3638]: wlan0: CTRL-EVENT-EAP-SUCCESS EAP authentication completed successfully

Lá vai você. Espero que esta resposta possa ajudar outra pessoa. Eu levei muito suor para descobrir isso.

Wirawan

Mais detalhes

Para os interessados, o certificado intermediário tem o seguinte assunto:

subject= /C=BE/O=GlobalSign nv-sa/CN=GlobalSign Organization Validation CA - G2

Essa CA de "organização" deve usar a chave R1, como mostrado aqui:

https://support.globalsign.com/customer/portal/articles/1426602-globalsign-root-certificates
    
por 08.07.2015 / 22:41