Desde que atualizei para o Debian 10, não consigo me conectar ao eduroam . Acontece que meu empregador decidiu usar EAP-TLS
com certificados de clientes assinados usando a MD5
função hash.
Pelo que posso encontrar na web, os MD5
certificados assinados estão desabilitados no OpenSSL versão 1.1 e os logs wpa_supplicant parecem confirmar isso:
wpa_supplicant[718]: EAP: EAP entering state RECEIVED
wpa_supplicant[718]: EAP: Received EAP-Request id=3 method=13 vendor=0 vendorMethod=0
wpa_supplicant[718]: EAP: EAP entering state GET_METHOD
wpa_supplicant[718]: wlp4s0: CTRL-EVENT-EAP-PROPOSED-METHOD vendor=0 method=13
wpa_supplicant[718]: EAP: Status notification: accept proposed method (param=TLS)
wpa_supplicant[718]: EAP: Initialize selected EAP method: vendor 0 method 13 (TLS)
wpa_supplicant[718]: TLS: using phase1 config options
wpa_supplicant[718]: TLS: Trusted root certificate(s) loaded
wpa_supplicant[718]: OpenSSL: tls_connection_client_cert - SSL_use_certificate_file failed error:140C618E:SSL routines:SSL_use_certificate:ca md too weak
wpa_supplicant[718]: TLS: Failed to set TLS connection parameters
wpa_supplicant[718]: ENGINE: engine deinit
wpa_supplicant[718]: EAP-TLS: Failed to initialize SSL.
wpa_supplicant[718]: wlp4s0: EAP: Failed to initialize EAP method: vendor 0 method 13 (TLS)
Existe uma maneira no OpenSSL 1.1 para habilitar MD5
, de preferência apenas para wpa_supplicant ?
Para a posteridade, acabei lendo o código fonte do OpenSSL e do wpa_supplicant e encontrei uma solução (parcial).
O problema é causado pelo retorno de chamada de segurança padrão do OpenSSL , que (razoavelmente) desabilita o uso do MD5 em todos os níveis: assinatura de certificado e conjunto de cifras de túnel. Gostaria de desabilitar essa verificação de certificados de cliente, pois isso não oferece nenhum risco de segurança da minha parte (o outro endpoint deve se preocupar). No entanto, isso não pode ser feito sem substituir o retorno de chamada de segurança, que não é uma solução limpa.
Portanto, a única maneira de usar um certificado de cliente fraco no wpa_supplicant é diminuir o nível de segurança para 0. Enquanto a maioria das pesquisas do Google por "ca md muito fraco" acabam sugerindo modificar a configuração padrão do OpenSSL para incluir:
onde
<section_default_conf>
,<section_ssl_conf>
e<section_system_default>
são nomes arbitrários, isso não funcionará com wpa_supplicant , que substitui a configuração padrão.Para diminuir o nível de segurança do wpa_supplicant , tive que fornecer a ele um arquivo de configuração (
/etc/wpa_supplicant/wpa_supplicant.conf
) que contém:Essa configuração é usada apenas se wpa_supplicant for chamado com um parâmetro de interface (
-i <interface>
). Como a maioria dos usuários, não uso o wpa_supplicant diretamente, mas uso o NetworkManager para fazer isso. No Debian os dois são executados como serviços e se comunicam através de DBus (ou um soquete Unix).Como o NetworkManager não pode passar o
openssl_ciphers
parâmetro para wpa_supplicant , isso deve ser feito para todas as conexões WiFi modificando owpa_supplicant.service
(atravéssystemctl edit --full wpa_supplicant.service
de ), para que a instrução exec de:lê:
onde
wlan0
é o nome da (apenas) interface WiFi.