Openssl

如何使用 OpenSSL 1.1 在 wpa_supplicant 中啟用 MD5 證書?

  • January 10, 2020

由於我升級到 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(through systemctl 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 介面的名稱在哪裡。

引用自:https://unix.stackexchange.com/questions/560684