如何使用 OpenSSL 1.1 在 wpa_supplicant 中啟用 MD5 證書?
由於我升級到 Debian 10,我無法連接到eduroam。事實證明,我的雇主決定使用使用散列函式
EAP-TLS
簽名的客戶端證書。MD5
從我在網上可以找到的內容來看,
MD5
簽名證書在 OpenSSL 1.1 版中被禁用,並且wpa_supplicant日誌似乎證實了這一點: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)
OpenSSL 1.1 中有沒有辦法啟用
MD5
,最好只用於wpa_supplicant?
為了後代,我最終會閱讀 OpenSSL 和 wpa_supplicant 的原始碼並找到(部分)解決方案。
問題是由 OpenSSL 的預設安全回調引起的,它(合理地)在每個級別禁用 MD5 的使用:證書籤名和隧道密碼套件。我想禁用對客戶端證書的檢查,因為這不會給我帶來任何安全風險(應該關注另一個端點)。但是,如果不替換安全回調就無法做到這一點,這不是一個乾淨的解決方案。
因此,在wpa_supplicant中使用弱客戶端證書的唯一方法是將安全級別降低到 0。雖然大多數 Google 搜尋*“ca md too weak”*最終建議修改預設OpenSSL配置以包括:
openssl_conf = <section_default_conf> [<section_default_conf>] ssl_conf = <section_ssl_conf> [<section_ssl_conf>] system_default = <section_system_default> [<section_system_default>] MinProtocol = TLSv1 CipherString = DEFAULT@SECLEVEL=0
其中
<section_default_conf>
,<section_ssl_conf>
和<section_system_default>
是任意名稱,這不適用於wpa_supplicant,它會覆蓋預設配置。為了降低wpa_supplicant的安全級別,我必須向他提供一個配置文件 (
/etc/wpa_supplicant/wpa_supplicant.conf
),其中包含:openssl_ciphers=DEFAULT@SECLEVEL=0
僅當使用介面參數 ( ) 呼叫wpa_supplicant時才使用此設置
-i <interface>
。作為大多數使用者,我不直接使用 wpa_supplicant,而是使用 NetworkManager 來完成。在 Debian 上,兩者作為服務執行並通過 DBus(或 Unix 套接字)進行通信。由於NetworkManager無法將
openssl_ciphers
參數傳遞給wpa_supplicant,因此必須通過修改wpa_supplicant.service
(throughsystemctl edit --full wpa_supplicant.service
) 對所有 WiFi 連接執行此操作,以便 exec 指令來自:ExecStart=/sbin/wpa_supplicant -u -s -O /run/wpa_supplicant
閱讀:
ExecStart=/sbin/wpa_supplicant -u -s -O /run/wpa_supplicant -i wlan0 -c /etc/wpa_supplicant/wpa_supplicant.conf
wlan0
(唯一)WiFi 介面的名稱在哪裡。