tests: PEAP and TTLS phase2_auth behavior
Signed-off-by: Jouni Malinen <quic_jouni@quicinc.com>
This commit is contained in:
parent
de9a11f4dd
commit
b2a1e7fe7a
2 changed files with 66 additions and 4 deletions
|
@ -6353,14 +6353,22 @@ def check_tls_session_resumption_capa(dev, hapd):
|
||||||
|
|
||||||
def test_eap_ttls_pap_session_resumption(dev, apdev):
|
def test_eap_ttls_pap_session_resumption(dev, apdev):
|
||||||
"""EAP-TTLS/PAP session resumption"""
|
"""EAP-TTLS/PAP session resumption"""
|
||||||
|
run_eap_ttls_pap_session_resumption(dev, apdev, False)
|
||||||
|
|
||||||
|
def test_eap_ttls_pap_session_resumption_force_phase2(dev, apdev):
|
||||||
|
"""EAP-TTLS/PAP session resumption while forcing Phase 2 authentication"""
|
||||||
|
run_eap_ttls_pap_session_resumption(dev, apdev, True)
|
||||||
|
|
||||||
|
def run_eap_ttls_pap_session_resumption(dev, apdev, phase2_auth):
|
||||||
params = int_eap_server_params()
|
params = int_eap_server_params()
|
||||||
params['tls_session_lifetime'] = '60'
|
params['tls_session_lifetime'] = '60'
|
||||||
hapd = hostapd.add_ap(apdev[0], params)
|
hapd = hostapd.add_ap(apdev[0], params)
|
||||||
check_tls_session_resumption_capa(dev[0], hapd)
|
check_tls_session_resumption_capa(dev[0], hapd)
|
||||||
|
phase1 = "phase2_auth=2" if phase2_auth else ""
|
||||||
eap_connect(dev[0], hapd, "TTLS", "pap user",
|
eap_connect(dev[0], hapd, "TTLS", "pap user",
|
||||||
anonymous_identity="ttls", password="password",
|
anonymous_identity="ttls", password="password",
|
||||||
ca_cert="auth_serv/ca.pem", eap_workaround='0',
|
ca_cert="auth_serv/ca.pem", eap_workaround='0',
|
||||||
phase2="auth=PAP")
|
phase1=phase1, phase2="auth=PAP")
|
||||||
if dev[0].get_status_field("tls_session_reused") != '0':
|
if dev[0].get_status_field("tls_session_reused") != '0':
|
||||||
raise Exception("Unexpected session resumption on the first connection")
|
raise Exception("Unexpected session resumption on the first connection")
|
||||||
|
|
||||||
|
@ -6371,7 +6379,10 @@ def test_eap_ttls_pap_session_resumption(dev, apdev):
|
||||||
ev = dev[0].wait_event(["WPA: Key negotiation completed"], timeout=10)
|
ev = dev[0].wait_event(["WPA: Key negotiation completed"], timeout=10)
|
||||||
if ev is None:
|
if ev is None:
|
||||||
raise Exception("Key handshake with the AP timed out")
|
raise Exception("Key handshake with the AP timed out")
|
||||||
if dev[0].get_status_field("tls_session_reused") != '1':
|
reused = dev[0].get_status_field("tls_session_reused") == '1'
|
||||||
|
if phase2_auth and reused:
|
||||||
|
raise Exception("Session resumption used on the second connection")
|
||||||
|
if not phase2_auth and not reused:
|
||||||
raise Exception("Session resumption not used on the second connection")
|
raise Exception("Session resumption not used on the second connection")
|
||||||
hwsim_utils.test_connectivity(dev[0], hapd)
|
hwsim_utils.test_connectivity(dev[0], hapd)
|
||||||
|
|
||||||
|
@ -6492,14 +6503,23 @@ def test_eap_ttls_no_session_resumption(dev, apdev):
|
||||||
|
|
||||||
def test_eap_peap_session_resumption(dev, apdev):
|
def test_eap_peap_session_resumption(dev, apdev):
|
||||||
"""EAP-PEAP session resumption"""
|
"""EAP-PEAP session resumption"""
|
||||||
|
run_eap_peap_session_resumption(dev, apdev, False)
|
||||||
|
|
||||||
|
def test_eap_peap_session_resumption_force_phase2(dev, apdev):
|
||||||
|
"""EAP-PEAP session resumption while forcing Phase 2 authentication"""
|
||||||
|
run_eap_peap_session_resumption(dev, apdev, True)
|
||||||
|
|
||||||
|
def run_eap_peap_session_resumption(dev, apdev, phase2_auth):
|
||||||
check_eap_capa(dev[0], "MSCHAPV2")
|
check_eap_capa(dev[0], "MSCHAPV2")
|
||||||
params = int_eap_server_params()
|
params = int_eap_server_params()
|
||||||
params['tls_session_lifetime'] = '60'
|
params['tls_session_lifetime'] = '60'
|
||||||
hapd = hostapd.add_ap(apdev[0], params)
|
hapd = hostapd.add_ap(apdev[0], params)
|
||||||
check_tls_session_resumption_capa(dev[0], hapd)
|
check_tls_session_resumption_capa(dev[0], hapd)
|
||||||
|
phase1 = "phase2_auth=2" if phase2_auth else ""
|
||||||
eap_connect(dev[0], hapd, "PEAP", "user",
|
eap_connect(dev[0], hapd, "PEAP", "user",
|
||||||
anonymous_identity="peap", password="password",
|
anonymous_identity="peap", password="password",
|
||||||
ca_cert="auth_serv/ca.pem", phase2="auth=MSCHAPV2")
|
ca_cert="auth_serv/ca.pem", phase1=phase1,
|
||||||
|
phase2="auth=MSCHAPV2")
|
||||||
if dev[0].get_status_field("tls_session_reused") != '0':
|
if dev[0].get_status_field("tls_session_reused") != '0':
|
||||||
raise Exception("Unexpected session resumption on the first connection")
|
raise Exception("Unexpected session resumption on the first connection")
|
||||||
|
|
||||||
|
@ -6510,7 +6530,10 @@ def test_eap_peap_session_resumption(dev, apdev):
|
||||||
ev = dev[0].wait_event(["WPA: Key negotiation completed"], timeout=10)
|
ev = dev[0].wait_event(["WPA: Key negotiation completed"], timeout=10)
|
||||||
if ev is None:
|
if ev is None:
|
||||||
raise Exception("Key handshake with the AP timed out")
|
raise Exception("Key handshake with the AP timed out")
|
||||||
if dev[0].get_status_field("tls_session_reused") != '1':
|
reused = dev[0].get_status_field("tls_session_reused") == '1'
|
||||||
|
if phase2_auth and reused:
|
||||||
|
raise Exception("Session resumption used on the second connection")
|
||||||
|
if not phase2_auth and not reused:
|
||||||
raise Exception("Session resumption not used on the second connection")
|
raise Exception("Session resumption not used on the second connection")
|
||||||
|
|
||||||
def test_eap_peap_session_resumption_crypto_binding(dev, apdev):
|
def test_eap_peap_session_resumption_crypto_binding(dev, apdev):
|
||||||
|
|
|
@ -337,6 +337,45 @@ def test_ieee8021x_reauth(dev, apdev):
|
||||||
time.sleep(0.1)
|
time.sleep(0.1)
|
||||||
hwsim_utils.test_connectivity(dev[0], hapd)
|
hwsim_utils.test_connectivity(dev[0], hapd)
|
||||||
|
|
||||||
|
def test_ieee8021x_reauth_peap(dev, apdev):
|
||||||
|
"""IEEE 802.1X and EAPOL_REAUTH request (PEAP and session resumption)"""
|
||||||
|
run_ieee8021x_reauth_peap(dev, apdev, False)
|
||||||
|
|
||||||
|
def test_ieee8021x_reauth_peap2(dev, apdev):
|
||||||
|
"""IEEE 802.1X and EAPOL_REAUTH request (PEAP and session resumption; Phase 2 auth forced)"""
|
||||||
|
run_ieee8021x_reauth_peap(dev, apdev, True)
|
||||||
|
|
||||||
|
def run_ieee8021x_reauth_peap(dev, apdev, phase2_auth):
|
||||||
|
params = {"eap_server": "1", "eap_user_file": "auth_serv/eap_user.conf",
|
||||||
|
"ca_cert": "auth_serv/ca.pem",
|
||||||
|
"server_cert": "auth_serv/server.pem",
|
||||||
|
"private_key": "auth_serv/server.key",
|
||||||
|
"dh_file": "auth_serv/dh.conf",
|
||||||
|
"tls_session_lifetime": "60"}
|
||||||
|
params["ssid"] = "ieee8021x-open"
|
||||||
|
params["ieee8021x"] = "1"
|
||||||
|
hapd = hostapd.add_ap(apdev[0], params)
|
||||||
|
|
||||||
|
phase1 = "phase2_auth=2" if phase2_auth else ""
|
||||||
|
dev[0].connect("ieee8021x-open", key_mgmt="IEEE8021X", eapol_flags="0",
|
||||||
|
eap="PEAP", identity="user", anonymous_identity="peap",
|
||||||
|
password="password", ca_cert="auth_serv/ca.pem",
|
||||||
|
phase1=phase1, phase2="auth=MSCHAPV2",
|
||||||
|
scan_freq="2412")
|
||||||
|
|
||||||
|
hapd.request("EAPOL_REAUTH " + dev[0].own_addr())
|
||||||
|
ev = dev[0].wait_event(["CTRL-EVENT-EAP-STARTED"], timeout=5)
|
||||||
|
if ev is None:
|
||||||
|
raise Exception("EAP authentication did not start")
|
||||||
|
ev = dev[0].wait_event(["CTRL-EVENT-EAP-SUCCESS"], timeout=5)
|
||||||
|
if ev is None:
|
||||||
|
raise Exception("EAP authentication did not succeed")
|
||||||
|
reused = dev[0].get_status_field("tls_session_reused") == '1'
|
||||||
|
if phase2_auth and reused:
|
||||||
|
raise Exception("Session resumption used on the second connection")
|
||||||
|
if not phase2_auth and not reused:
|
||||||
|
raise Exception("Session resumption not used on the second connection")
|
||||||
|
|
||||||
def test_ieee8021x_reauth_wep(dev, apdev, params):
|
def test_ieee8021x_reauth_wep(dev, apdev, params):
|
||||||
"""IEEE 802.1X and EAPOL_REAUTH request with WEP"""
|
"""IEEE 802.1X and EAPOL_REAUTH request with WEP"""
|
||||||
check_wep_capa(dev[0])
|
check_wep_capa(dev[0])
|
||||||
|
|
Loading…
Reference in a new issue