自从我升级到 Debian 10 后,我无法连接到教育阿姆。事实证明,我的雇主决定使用EAP-TLS
使用MD5
哈希函数签名的客户端证书。
据我在网上找到的信息,MD5
签名证书在 OpenSSL 版本 1.1 中被禁用,并且wpa_请求者日志似乎证实了这一点:
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_请求者?
答案1
为了后代的缘故,我最终阅读了 OpenSSL 和 wpa_supplicant 的源代码并找到了(部分)解决方案。
该问题是由 OpenSSL 引起的默认安全回调,这(合理地)在每个级别禁用 MD5:证书签名和隧道密码套件。我想禁用对客户端证书的此检查,因为这不会给我带来任何安全风险(应该关注其他端点)。但是,如果不替换安全回调,就无法完成此操作,这不是一个干净的解决方案。
因此,使用弱客户端证书的唯一方法wpa_请求者是将安全级别降低到 0。虽然大多数 Google 搜索“ca MD 太弱了”最终建议修改默认值开放式SSL配置包括:
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_请求者,它会覆盖默认配置。
为了降低安全级别wpa_请求者我必须向他提供一个配置文件(/etc/wpa_supplicant/wpa_supplicant.conf
),其中包含:
openssl_ciphers=DEFAULT@SECLEVEL=0
仅当以下情况时才使用此设置wpa_请求者使用接口参数 ( -i <interface>
) 进行调用。与大多数用户一样,我不直接使用 wpa_supplicant,而是使用 NetworkManager 来完成此操作。在 Debian 上,两者作为服务运行并通过 DBus(或 Unix 套接字)进行通信。
自从网络管理器无法将openssl_ciphers
参数传递给wpa_请求者wpa_supplicant.service
,必须通过修改(通过)对所有 WiFi 连接完成此操作systemctl edit --full wpa_supplicant.service
,以便 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 接口的名称。