2016年8月17日水曜日

EAP-TLS で wpa_supplicant 失敗する。md5 の署名が原因だった。

Fedora 20 から Fedora 24 にジャンプアップしたら(アップデートサボりすぎ)
wpa_supplicant が CONNECTED にならん。

wlp3s0: CTRL-EVENT-EAP-METHOD EAP vendor 0 method 13 (TLS) selected
wlp3s0: CTRL-EVENT-EAP-PEER-CERT depth=1 subject='/C=JP/ST=Tokyo/...' hash=...
TLS: Certificate verification failed, error 7 (certificate signature failure) depth 0 for '/C=JP/ST=Tokyo/...'
wlp3s0: CTRL-EVENT-EAP-TLS-CERT-ERROR reason=0 depth=0 subject='/C=JP/ST=Tokyo/...err='certificate signature failure'
SSL: SSL3 alert: write (local SSL3 detected an error):fatal:decrypt error
OpenSSL: openssl_handshake - SSL_connect error:0D0C50A1:asn1 encoding routines:ASN1_item_verify:unknown message digest algorithm
OpenSSL: pending error: error:14090086:SSL routines:ssl3_get_server_certificate:certificate verify failed
wlp3s0: CTRL-EVENT-EAP-FAILURE EAP authentication failed

SSLv3 のせいかと思ったが、いろいろググると手元のクライアント証明書が MD5
で署名されているのが原因のようだ。手元の証明書を開けてみたら以下だった。

    Signature Algorithm: md5WithRSAEncryption

下記環境変数を設定して wpa_supplicantを実行すればイケた。

OPENSSL_ENABLE_MD5_VERIFY=1
NSS_HASH_ALG_SUPPORT=+MD5