如何使用 OpenSSL 1.1 在 wpa_supplicant 中启用 MD5 证书?

如何使用 OpenSSL 1.1 在 wpa_supplicant 中启用 MD5 证书?

自从我升级到 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 接口的名称。

相关内容