我正在尝试将 Raspberry Pi 连接到 EAP-TLS Wi-Fi 接入点。连接失败:
wlan0: CTRL-EVENT-EAP-STARTED EAP authentication started
wlan0: CTRL-EVENT-EAP-PROPOSED-METHOD vendor=0 method=13
OpenSSL: tls_read_pkcs12 - Failed to use PKCS#12 file error:0D0680A8:asn1 encoding routines:ASN1_CHECK_TLEN:wrong tag
OpenSSL: pending error: error:0D07803A:asn1 encoding routines:ASN1_ITEM_EX_D2I:nested asn1 error
OpenSSL: tls_connection_private_key - Failed to load private key error:00000000:lib(0):func(0):reason(0)
TLS: Failed to load private key '/etc/ssl/private/demo.key'
TLS: Failed to set TLS connection parameters
EAP-TLS: Failed to initialize SSL.
当我搜索“ASN1_CHECK_TLEN:错误的标签”时,我所能找到的只是证书文件以某种方式损坏的建议,并且我需要检查是否没有前导或尾随空格。该文件看起来不错,除了当我运行时openssl rsa -check -noout -in /etc/ssl/private/demo.key
,它会提示输入密码短语,当我输入密码短语时,它会打印:“RSA key ok”。
private_key_passwd
我还仔细检查了存储在中的密码wpa_supplicant.conf
,它看起来是正确的。
我如何找出问题所在?
答案1
openssl rsa
默认情况下需要 PEM 编码的 RSA 密钥,但错误消息表明wpa_supplicant
假设密钥文件是 PKCS#12 编码的。
阅读了inprivate_key
配置项的描述后,似乎行为如下:wpa_supplicant.conf
/usr/share/doc/wpa_supplicant/examples/wpa_supplicant.conf
如果您的客户端证书和相应的私钥是PEM格式,您应该分别指定它们的文件名、using
client_cert
和private_key
配置项。如果您的客户端证书和私钥位于单个 PKCS#12 文件中(后缀通常为 .pfx 或 .p12,不能直接使用 读取
openssl rsa
),那么您应该只使用配置项指定文件名,而根本private_key
不使用该配置项client_cert
。换句话说,如果client_cert
未指定并且private_key
是纯文件名,wpa_supplicant
则将采用 PKCS#12 格式。如果
client_cert
配置项不存在并且private_key
配置项包含几种可能的 URI 样式格式之一,则这些格式将被解释为对 PKCS#11 令牌(智能卡)或 Windows 证书存储中存储的证书(如果适用)的引用。
看来您未能client_cert
在 中指定wpa_supplicant.conf
。