| Automatic regression and interoperability testing of wpa_supplicant's |
| IEEE 802.1X/EAPOL authentication |
| |
| Test program: |
| - Linked some parts of IEEE 802.1X Authenticator implementation from |
| hostapd (RADIUS client and RADIUS processing, EAP<->RADIUS |
| encapsulation/decapsulation) into wpa_supplicant. |
| - Replaced wpa_supplicant.c and wpa.c with test code that trigger |
| IEEE 802.1X authentication automatically without need for wireless |
| client card or AP. |
| - For EAP methods that generate keying material, the key derived by the |
| Supplicant is verified to match with the one received by the (now |
| integrated) Authenticator. |
| |
| The full automated test suite can now be run in couple of seconds, but |
| I'm more than willing to add new RADIUS authentication servers to make |
| this take a bit more time.. ;-) As an extra bonus, this can also be |
| seen as automatic regression/interoperability testing for the RADIUS |
| server, too. |
| |
| In order for me to be able to use a new authentication server, the |
| server need to be available from Internet (at least from one static IP |
| address) and I will need to get suitable user name/password pairs, |
| certificates, and private keys for testing use. Other alternative |
| would be to get an evaluation version of the server so that I can |
| install it on my own test setup. If you are interested in providing |
| either server access or evaluation version, please contact me |
| (j@w1.fi). |
| |
| |
| Test matrix |
| |
| +) tested successfully |
| F) failed |
| -) server did not support |
| ?) not tested |
| |
| Cisco ACS ----------------------------------------------------------. |
| hostapd --------------------------------------------------------. | |
| Cisco Aironet 1200 AP (local RADIUS server) ----------------. | | |
| Periodik Labs Elektron ---------------------------------. | | | |
| Lucent NavisRadius ---------------------------------. | | | | |
| Interlink RAD-Series ---------------------------. | | | | | |
| Radiator -----------------------------------. | | | | | | |
| Meetinghouse Aegis ---------------------. | | | | | | | |
| Funk Steel-Belted ------------------. | | | | | | | | |
| Funk Odyssey -------------------. | | | | | | | | | |
| Microsoft IAS --------------. | | | | | | | | | | |
| FreeRADIUS -------------. | | | | | | | | | | | |
| | | | | | | | | | | | | |
| |
| EAP-MD5 + - - + + + + + - - + + |
| EAP-GTC + - - ? + + + + - - + - |
| EAP-OTP - - - - - + - - - - - - |
| EAP-MSCHAPv2 + - - + + + + + - - + - |
| EAP-TLS + + + + + + + + - - + + |
| EAP-PEAPv0/MSCHAPv2 + + + + + + + + + - + + |
| EAP-PEAPv0/GTC + - + - + + + + - - + + |
| EAP-PEAPv0/OTP - - - - - + - - - - - - |
| EAP-PEAPv0/MD5 + - - + + + + + - - + - |
| EAP-PEAPv0/TLS + + - + + + F + - - + + |
| EAP-PEAPv0/SIM - - - - - - - - - - + - |
| EAP-PEAPv0/AKA - - - - - - - - - - + - |
| EAP-PEAPv0/PSK - - - - - - - - - - + - |
| EAP-PEAPv0/PAX - - - - - - - - - - + - |
| EAP-PEAPv0/SAKE - - - - - - - - - - + - |
| EAP-PEAPv0/GPSK - - - - - - - - - - + - |
| EAP-PEAPv1/MSCHAPv2 - - + + + +1 + +5 +8 - + + |
| EAP-PEAPv1/GTC - - + + + +1 + +5 +8 - + + |
| EAP-PEAPv1/OTP - - - - - +1 - - - - - - |
| EAP-PEAPv1/MD5 - - - + + +1 + +5 - - + - |
| EAP-PEAPv1/TLS - - - + + +1 F +5 - - + + |
| EAP-PEAPv1/SIM - - - - - - - - - - + - |
| EAP-PEAPv1/AKA - - - - - - - - - - + - |
| EAP-PEAPv1/PSK - - - - - - - - - - + - |
| EAP-PEAPv1/PAX - - - - - - - - - - + - |
| EAP-PEAPv1/SAKE - - - - - - - - - - + - |
| EAP-PEAPv1/GPSK - - - - - - - - - - + - |
| EAP-TTLS/CHAP + - +2 + + + + + + - + - |
| EAP-TTLS/MSCHAP + - + + + + + + + - + - |
| EAP-TTLS/MSCHAPv2 + - + + + + + + + - + - |
| EAP-TTLS/PAP + - + + + + + + + - + - |
| EAP-TTLS/EAP-MD5 + - +2 + + + + + + - + - |
| EAP-TTLS/EAP-GTC + - +2 ? + + + + - - + - |
| EAP-TTLS/EAP-OTP - - - - - + - - - - - - |
| EAP-TTLS/EAP-MSCHAPv2 + - +2 + + + + + + - + - |
| EAP-TTLS/EAP-TLS + - +2 + F + + + - - + - |
| EAP-TTLS/EAP-SIM - - - - - - - - - - + - |
| EAP-TTLS/EAP-AKA - - - - - - - - - - + - |
| EAP-TTLS/EAP-PSK - - - - - - - - - - + - |
| EAP-TTLS/EAP-PAX - - - - - - - - - - + - |
| EAP-TTLS/EAP-SAKE - - - - - - - - - - + - |
| EAP-TTLS/EAP-GPSK - - - - - - - - - - + - |
| EAP-TTLS + TNC - - - - - + - - - - + - |
| EAP-SIM + - - ? - + - ? - - + - |
| EAP-AKA - - - - - + - - - - + - |
| EAP-AKA' - - - - - - - - - - + - |
| EAP-PSK +7 - - - - + - - - - + - |
| EAP-PAX - - - - - + - - - - + - |
| EAP-SAKE - - - - - - - - - - + - |
| EAP-GPSK - - - - - - - - - - + - |
| EAP-FAST/MSCHAPv2(prov) - - - + - + - - - + + + |
| EAP-FAST/GTC(auth) - - - + - + - - - + + + |
| EAP-FAST/MSCHAPv2(aprov)- - - - - + - - - - + + |
| EAP-FAST/GTC(aprov) - - - - - + - - - - + + |
| EAP-FAST/MD5(aprov) - - - - - + - - - - + - |
| EAP-FAST/TLS(aprov) - - - - - - - - - - + + |
| EAP-FAST/SIM(aprov) - - - - - - - - - - + - |
| EAP-FAST/AKA(aprov) - - - - - - - - - - + - |
| EAP-FAST/MSCHAPv2(auth) - - - - - + - - - - + + |
| EAP-FAST/MD5(auth) - - - - - + - - - - + - |
| EAP-FAST/TLS(auth) - - - - - - - - - - + + |
| EAP-FAST/SIM(auth) - - - - - - - - - - + - |
| EAP-FAST/AKA(auth) - - - - - - - - - - + - |
| EAP-FAST + TNC - - - - - - - - - - + - |
| LEAP + - + + + + F +6 - + - + |
| EAP-TNC +9 - - - - + - - - - + - |
| EAP-IKEv2 +10 - - - - - - - - - + - |
| |
| 1) PEAPv1 required new label, "client PEAP encryption" instead of "client EAP |
| encryption", during key derivation (requires phase1="peaplabel=1" in the |
| network configuration in wpa_supplicant.conf) |
| 2) used FreeRADIUS as inner auth server |
| 5) PEAPv1 required termination of negotiation on tunneled EAP-Success and new |
| label in key deriviation |
| (phase1="peap_outer_success=0 peaplabel=1") (in "IETF Draft 5" mode) |
| 6) Authenticator simulator required patching for handling Access-Accept within |
| negotiation (for the first EAP-Success of LEAP) |
| 7) tested only with an older (incompatible) draft of EAP-PSK; FreeRADIUS does |
| not support the current EAP-PSK (RFC) specification |
| 8) PEAPv1 used non-standard version negotiation (client had to force v1 even |
| though server reported v0 as the highest supported version) |
| 9) only EAP-TTLS/EAP-TNC tested, i.e., test did not include proper sequence of |
| client authentication followed by TNC inside the tunnel |
| 10) worked only with special compatibility code to match the IKEv2 server |
| implementation |
| |
| |
| Automated tests: |
| |
| FreeRADIUS (2.0-beta/CVS snapshot) |
| - EAP-MD5-Challenge |
| - EAP-GTC |
| - EAP-MSCHAPv2 |
| - EAP-TLS |
| - EAP-PEAPv0 / MSCHAPv2 |
| - EAP-PEAPv0 / GTC |
| - EAP-PEAPv0 / MD5-Challenge |
| - EAP-PEAPv0 / TLS |
| - EAP-TTLS / EAP-MD5-Challenge |
| - EAP-TTLS / EAP-GTC |
| - EAP-TTLS / EAP-MSCHAPv2 |
| - EAP-TTLS / EAP-TLS |
| - EAP-TTLS / CHAP |
| - EAP-TTLS / PAP |
| - EAP-TTLS / MSCHAP |
| - EAP-TTLS / MSCHAPv2 |
| - EAP-TTLS / EAP-TNC (partial support; no authentication sequence) |
| - EAP-SIM |
| - LEAP |
| |
| Microsoft Windows Server 2003 / IAS |
| - EAP-TLS |
| - EAP-PEAPv0 / MSCHAPv2 |
| - EAP-PEAPv0 / TLS |
| - EAP-MD5 |
| * IAS does not seem to support other EAP methods |
| |
| Funk Odyssey 2.01.00.653 |
| - EAP-TLS |
| - EAP-PEAPv0 / MSCHAPv2 |
| - EAP-PEAPv0 / GTC |
| - EAP-PEAPv1 / MSCHAPv2 |
| - EAP-PEAPv1 / GTC |
| Note: PEAPv1 requires TLS key derivation to use label "client EAP encryption" |
| - EAP-TTLS / CHAP (using FreeRADIUS as inner auth srv) |
| - EAP-TTLS / MSCHAP |
| - EAP-TTLS / MSCHAPv2 |
| - EAP-TTLS / PAP |
| - EAP-TTLS / EAP-MD5-Challenge (using FreeRADIUS as inner auth srv) |
| - EAP-TTLS / EAP-GTC (using FreeRADIUS as inner auth srv) |
| - EAP-TTLS / EAP-MSCHAPv2 (using FreeRADIUS as inner auth srv) |
| - EAP-TTLS / EAP-TLS (using FreeRADIUS as inner auth srv) |
| * not supported in Odyssey: |
| - EAP-MD5-Challenge |
| - EAP-GTC |
| - EAP-MSCHAPv2 |
| - EAP-PEAP / MD5-Challenge |
| - EAP-PEAP / TLS |
| |
| Funk Steel-Belted Radius Enterprise Edition v4.71.739 |
| - EAP-MD5-Challenge |
| - EAP-MSCHAPv2 |
| - EAP-TLS |
| - EAP-PEAPv0 / MSCHAPv2 |
| - EAP-PEAPv0 / MD5 |
| - EAP-PEAPv0 / TLS |
| - EAP-PEAPv1 / MSCHAPv2 |
| - EAP-PEAPv1 / MD5 |
| - EAP-PEAPv1 / GTC |
| - EAP-PEAPv1 / TLS |
| Note: PEAPv1 requires TLS key derivation to use label "client EAP encryption" |
| - EAP-TTLS / CHAP |
| - EAP-TTLS / MSCHAP |
| - EAP-TTLS / MSCHAPv2 |
| - EAP-TTLS / PAP |
| - EAP-TTLS / EAP-MD5-Challenge |
| - EAP-TTLS / EAP-MSCHAPv2 |
| - EAP-TTLS / EAP-TLS |
| |
| Meetinghouse Aegis 1.1.4 |
| - EAP-MD5-Challenge |
| - EAP-GTC |
| - EAP-MSCHAPv2 |
| - EAP-TLS |
| - EAP-PEAPv0 / MSCHAPv2 |
| - EAP-PEAPv0 / TLS |
| - EAP-PEAPv0 / GTC |
| - EAP-PEAPv0 / MD5-Challenge |
| - EAP-PEAPv1 / MSCHAPv2 |
| - EAP-PEAPv1 / TLS |
| - EAP-PEAPv1 / GTC |
| - EAP-PEAPv1 / MD5-Challenge |
| Note: PEAPv1 requires TLS key derivation to use label "client EAP encryption" |
| - EAP-TTLS / CHAP |
| - EAP-TTLS / MSCHAP |
| - EAP-TTLS / MSCHAPv2 |
| - EAP-TTLS / PAP |
| - EAP-TTLS / EAP-MD5-Challenge |
| - EAP-TTLS / EAP-GTC |
| - EAP-TTLS / EAP-MSCHAPv2 |
| * did not work |
| - EAP-TTLS / EAP-TLS |
| (Server rejects authentication without any reason in debug log. It |
| looks like the inner TLS negotiation starts properly and the last |
| packet from Supplicant looks like the one sent in the Phase 1. The |
| server generates a valid looking reply in the same way as in Phase |
| 1, but then ends up sending Access-Reject. Maybe an issue with TTLS |
| fragmentation in the Aegis server(?) The packet seems to include |
| 1328 bytes of EAP-Message and this may go beyond the fragmentation |
| limit with AVP encapsulation and TLS tunneling. Note: EAP-PEAP/TLS |
| did work, so this issue seems to be with something TTLS specific.) |
| |
| Radiator 3.17.1 (eval, with all patches up to and including 2007-05-25) |
| - EAP-MD5-Challenge |
| - EAP-GTC |
| - EAP-OTP |
| - EAP-MSCHAPv2 |
| - EAP-TLS |
| - EAP-PEAPv0 / MSCHAPv2 |
| - EAP-PEAPv0 / GTC |
| - EAP-PEAPv0 / OTP |
| - EAP-PEAPv0 / MD5-Challenge |
| - EAP-PEAPv0 / TLS |
| Note: Needed to use unknown identity in outer auth and some times the server |
| seems to get confused and fails to send proper Phase 2 data. |
| - EAP-PEAPv1 / MSCHAPv2 |
| - EAP-PEAPv1 / GTC |
| - EAP-PEAPv1 / OTP |
| - EAP-PEAPv1 / MD5-Challenge |
| - EAP-PEAPv1 / TLS |
| Note: This has some additional requirements for EAPTLS_MaxFragmentSize. |
| Using 1300 for outer auth and 500 for inner auth seemed to work. |
| Note: Needed to use unknown identity in outer auth and some times the server |
| seems to get confused and fails to send proper Phase 2 data. |
| - EAP-TTLS / CHAP |
| - EAP-TTLS / MSCHAP |
| - EAP-TTLS / MSCHAPv2 |
| - EAP-TTLS / PAP |
| - EAP-TTLS / EAP-MD5-Challenge |
| - EAP-TTLS / EAP-GTC |
| - EAP-TTLS / EAP-OTP |
| - EAP-TTLS / EAP-MSCHAPv2 |
| - EAP-TTLS / EAP-TLS |
| Note: This has some additional requirements for EAPTLS_MaxFragmentSize. |
| Using 1300 for outer auth and 500 for inner auth seemed to work. |
| - EAP-SIM |
| - EAP-AKA |
| - EAP-PSK |
| - EAP-PAX |
| - EAP-TNC |
| |
| Interlink Networks RAD-Series 6.1.2.7 |
| - EAP-MD5-Challenge |
| - EAP-GTC |
| - EAP-MSCHAPv2 |
| - EAP-TLS |
| - EAP-PEAPv0 / MSCHAPv2 |
| - EAP-PEAPv0 / GTC |
| - EAP-PEAPv0 / MD5-Challenge |
| - EAP-PEAPv1 / MSCHAPv2 |
| - EAP-PEAPv1 / GTC |
| - EAP-PEAPv1 / MD5-Challenge |
| Note: PEAPv1 requires TLS key derivation to use label "client EAP encryption" |
| - EAP-TTLS / CHAP |
| - EAP-TTLS / MSCHAP |
| - EAP-TTLS / MSCHAPv2 |
| - EAP-TTLS / PAP |
| - EAP-TTLS / EAP-MD5-Challenge |
| - EAP-TTLS / EAP-GTC |
| - EAP-TTLS / EAP-MSCHAPv2 |
| - EAP-TTLS / EAP-TLS |
| * did not work |
| - EAP-PEAPv0 / TLS |
| - EAP-PEAPv1 / TLS |
| (Failed to decrypt Phase 2 data) |
| |
| Lucent NavisRadius 4.4.0 |
| - EAP-MD5-Challenge |
| - EAP-GTC |
| - EAP-MSCHAPv2 |
| - EAP-TLS |
| - EAP-PEAPv0 / MD5-Challenge |
| - EAP-PEAPv0 / MSCHAPv2 |
| - EAP-PEAPv0 / GTC |
| - EAP-PEAPv0 / TLS |
| - EAP-PEAPv1 / MD5-Challenge |
| - EAP-PEAPv1 / MSCHAPv2 |
| - EAP-PEAPv1 / GTC |
| - EAP-PEAPv1 / TLS |
| "IETF Draft 5" mode requires phase1="peap_outer_success=0 peaplabel=1" |
| 'Cisco ACU 5.05' mode works without phase1 configuration |
| - EAP-TTLS / CHAP |
| - EAP-TTLS / MSCHAP |
| - EAP-TTLS / MSCHAPv2 |
| - EAP-TTLS / PAP |
| - EAP-TTLS / EAP-MD5-Challenge |
| - EAP-TTLS / EAP-MSCHAPv2 |
| - EAP-TTLS / EAP-GTC |
| - EAP-TTLS / EAP-TLS |
| |
| Note: user certificate from NavisRadius had private key in a format |
| that wpa_supplicant could not use. Converting this to PKCS#12 and then |
| back to PEM allowed wpa_supplicant to use the key. |
| |
| |
| hostapd v0.3.3 |
| - EAP-MD5-Challenge |
| - EAP-GTC |
| - EAP-MSCHAPv2 |
| - EAP-TLS |
| - EAP-PEAPv0 / MSCHAPv2 |
| - EAP-PEAPv0 / GTC |
| - EAP-PEAPv0 / MD5-Challenge |
| - EAP-PEAPv1 / MSCHAPv2 |
| - EAP-PEAPv1 / GTC |
| - EAP-PEAPv1 / MD5-Challenge |
| - EAP-TTLS / CHAP |
| - EAP-TTLS / MSCHAP |
| - EAP-TTLS / MSCHAPv2 |
| - EAP-TTLS / PAP |
| - EAP-TTLS / EAP-MD5-Challenge |
| - EAP-TTLS / EAP-GTC |
| - EAP-TTLS / EAP-MSCHAPv2 |
| - EAP-SIM |
| - EAP-PAX |
| |
| PEAPv1: |
| |
| Funk Odyssey 2.01.00.653: |
| - uses tunneled EAP-Success, expects reply in tunnel or TLS ACK, sends MPPE |
| keys with outer EAP-Success message after this |
| - uses label "client EAP encryption" |
| - (peap_outer_success 1 and 2 work) |
| |
| Funk Steel-Belted Radius Enterprise Edition v4.71.739 |
| - uses tunneled EAP-Success, expects reply in tunnel or TLS ACK, sends MPPE |
| keys with outer EAP-Success message after this |
| - uses label "client EAP encryption" |
| - (peap_outer_success 1 and 2 work) |
| |
| Radiator 3.9: |
| - uses TLV Success and Reply, sends MPPE keys with outer EAP-Success message |
| after this |
| - uses label "client PEAP encryption" |
| |
| Lucent NavisRadius 4.4.0 (in "IETF Draft 5" mode): |
| - sends tunneled EAP-Success with MPPE keys and expects the authentication to |
| terminate at this point (gets somewhat confused with reply to this) |
| - uses label "client PEAP encryption" |
| - phase1="peap_outer_success=0 peaplabel=1" |
| |
| Lucent NavisRadius 4.4.0 (in "Cisco ACU 5.05" mode): |
| - sends tunneled EAP-Success with MPPE keys and expects to receive TLS ACK |
| as a reply |
| - uses label "client EAP encryption" |
| |
| Meetinghouse Aegis 1.1.4 |
| - uses tunneled EAP-Success, expects reply in tunnel or TLS ACK, sends MPPE |
| keys with outer EAP-Success message after this |
| - uses label "client EAP encryption" |
| - peap_outer_success 1 and 2 work |