1# EAP authentication tests 2# Copyright (c) 2019, Jouni Malinen <j@w1.fi> 3# 4# This software may be distributed under the terms of the BSD license. 5# See README for more details. 6 7import hostapd 8 9from utils import alloc_fail, fail_test, wait_fail_trigger, HwsimSkip 10from test_ap_eap import check_eap_capa, int_eap_server_params, eap_connect, \ 11 eap_reauth 12 13def int_teap_server_params(eap_teap_auth=None, eap_teap_pac_no_inner=None, 14 eap_teap_separate_result=None, eap_teap_id=None, 15 eap_teap_method_sequence=None): 16 params = int_eap_server_params() 17 params['pac_opaque_encr_key'] = "000102030405060708090a0b0c0dff00" 18 params['eap_fast_a_id'] = "101112131415161718191a1b1c1dff00" 19 params['eap_fast_a_id_info'] = "test server 0" 20 if eap_teap_auth: 21 params['eap_teap_auth'] = eap_teap_auth 22 if eap_teap_pac_no_inner: 23 params['eap_teap_pac_no_inner'] = eap_teap_pac_no_inner 24 if eap_teap_separate_result: 25 params['eap_teap_separate_result'] = eap_teap_separate_result 26 if eap_teap_id: 27 params['eap_teap_id'] = eap_teap_id 28 if eap_teap_method_sequence: 29 params['eap_teap_method_sequence'] = eap_teap_method_sequence 30 return params 31 32def test_eap_teap_eap_mschapv2(dev, apdev): 33 """EAP-TEAP with inner EAP-MSCHAPv2""" 34 check_eap_capa(dev[0], "TEAP") 35 check_eap_capa(dev[0], "MSCHAPV2") 36 params = hostapd.wpa2_eap_params(ssid="test-wpa2-eap") 37 hapd = hostapd.add_ap(apdev[0], params) 38 eap_connect(dev[0], hapd, "TEAP", "user", 39 anonymous_identity="TEAP", password="password", 40 ca_cert="auth_serv/ca.pem", phase2="auth=MSCHAPV2", 41 pac_file="blob://teap_pac") 42 eap_reauth(dev[0], "TEAP") 43 44def test_eap_teap_eap_pwd(dev, apdev): 45 """EAP-TEAP with inner EAP-PWD""" 46 check_eap_capa(dev[0], "TEAP") 47 check_eap_capa(dev[0], "PWD") 48 params = hostapd.wpa2_eap_params(ssid="test-wpa2-eap") 49 hapd = hostapd.add_ap(apdev[0], params) 50 eap_connect(dev[0], hapd, "TEAP", "user-pwd-2", 51 anonymous_identity="TEAP", password="password", 52 ca_cert="auth_serv/ca.pem", phase2="auth=PWD", 53 pac_file="blob://teap_pac") 54 55def test_eap_teap_eap_eke(dev, apdev): 56 """EAP-TEAP with inner EAP-EKE""" 57 check_eap_capa(dev[0], "TEAP") 58 check_eap_capa(dev[0], "EKE") 59 params = hostapd.wpa2_eap_params(ssid="test-wpa2-eap") 60 hapd = hostapd.add_ap(apdev[0], params) 61 eap_connect(dev[0], hapd, "TEAP", "user-eke-2", 62 anonymous_identity="TEAP", password="password", 63 ca_cert="auth_serv/ca.pem", phase2="auth=EKE", 64 pac_file="blob://teap_pac") 65 66def test_eap_teap_basic_password_auth(dev, apdev): 67 """EAP-TEAP with Basic-Password-Auth""" 68 check_eap_capa(dev[0], "TEAP") 69 params = int_teap_server_params(eap_teap_auth="1") 70 hapd = hostapd.add_ap(apdev[0], params) 71 eap_connect(dev[0], hapd, "TEAP", "user", 72 anonymous_identity="TEAP", password="password", 73 ca_cert="auth_serv/ca.pem", 74 pac_file="blob://teap_pac") 75 76def test_eap_teap_basic_password_auth_failure(dev, apdev): 77 """EAP-TEAP with Basic-Password-Auth failure""" 78 check_eap_capa(dev[0], "TEAP") 79 params = int_teap_server_params(eap_teap_auth="1") 80 hapd = hostapd.add_ap(apdev[0], params) 81 eap_connect(dev[0], hapd, "TEAP", "user", 82 anonymous_identity="TEAP", password="incorrect", 83 ca_cert="auth_serv/ca.pem", 84 pac_file="blob://teap_pac", expect_failure=True) 85 86def test_eap_teap_basic_password_auth_no_password(dev, apdev): 87 """EAP-TEAP with Basic-Password-Auth and no password configured""" 88 check_eap_capa(dev[0], "TEAP") 89 params = int_teap_server_params(eap_teap_auth="1") 90 hapd = hostapd.add_ap(apdev[0], params) 91 eap_connect(dev[0], hapd, "TEAP", "user", 92 anonymous_identity="TEAP", 93 ca_cert="auth_serv/ca.pem", 94 pac_file="blob://teap_pac", expect_failure=True) 95 96def test_eap_teap_basic_password_auth_id0(dev, apdev): 97 """EAP-TEAP with Basic-Password-Auth (eap_teap_id=0)""" 98 run_eap_teap_basic_password_auth_id(dev, apdev, 0) 99 100def test_eap_teap_basic_password_auth_id1(dev, apdev): 101 """EAP-TEAP with Basic-Password-Auth (eap_teap_id=1)""" 102 run_eap_teap_basic_password_auth_id(dev, apdev, 1) 103 104def test_eap_teap_basic_password_auth_id2(dev, apdev): 105 """EAP-TEAP with Basic-Password-Auth (eap_teap_id=2)""" 106 run_eap_teap_basic_password_auth_id(dev, apdev, 2, failure=True) 107 108def test_eap_teap_basic_password_auth_id3(dev, apdev): 109 """EAP-TEAP with Basic-Password-Auth (eap_teap_id=3)""" 110 run_eap_teap_basic_password_auth_id(dev, apdev, 3) 111 112def test_eap_teap_basic_password_auth_id4(dev, apdev): 113 """EAP-TEAP with Basic-Password-Auth (eap_teap_id=4)""" 114 run_eap_teap_basic_password_auth_id(dev, apdev, 4) 115 116def run_eap_teap_basic_password_auth_id(dev, apdev, eap_teap_id, failure=False): 117 check_eap_capa(dev[0], "TEAP") 118 params = int_teap_server_params(eap_teap_auth="1", 119 eap_teap_id=str(eap_teap_id)) 120 hapd = hostapd.add_ap(apdev[0], params) 121 eap_connect(dev[0], hapd, "TEAP", "user", 122 anonymous_identity="TEAP", password="password", 123 ca_cert="auth_serv/ca.pem", 124 pac_file="blob://teap_pac", 125 expect_failure=failure) 126 127def test_eap_teap_basic_password_auth_machine(dev, apdev): 128 """EAP-TEAP with Basic-Password-Auth using machine credential""" 129 check_eap_capa(dev[0], "TEAP") 130 params = int_teap_server_params(eap_teap_auth="1", eap_teap_id="2") 131 hapd = hostapd.add_ap(apdev[0], params) 132 eap_connect(dev[0], hapd, "TEAP", "", 133 anonymous_identity="TEAP", 134 machine_identity="machine", machine_password="machine-password", 135 ca_cert="auth_serv/ca.pem", 136 pac_file="blob://teap_pac") 137 138def test_eap_teap_basic_password_auth_user_and_machine(dev, apdev): 139 """EAP-TEAP with Basic-Password-Auth using user and machine credentials""" 140 check_eap_capa(dev[0], "TEAP") 141 params = int_teap_server_params(eap_teap_auth="1", eap_teap_id="5") 142 hapd = hostapd.add_ap(apdev[0], params) 143 eap_connect(dev[0], hapd, "TEAP", "user", password="password", 144 anonymous_identity="TEAP", 145 machine_identity="machine", machine_password="machine-password", 146 ca_cert="auth_serv/ca.pem", 147 pac_file="blob://teap_pac") 148 149def test_eap_teap_basic_password_auth_user_and_machine_fail_user(dev, apdev): 150 """EAP-TEAP with Basic-Password-Auth using user and machine credentials (fail user)""" 151 check_eap_capa(dev[0], "TEAP") 152 params = int_teap_server_params(eap_teap_auth="1", eap_teap_id="5") 153 hapd = hostapd.add_ap(apdev[0], params) 154 eap_connect(dev[0], hapd, "TEAP", "user", password="wrong-password", 155 anonymous_identity="TEAP", 156 machine_identity="machine", machine_password="machine-password", 157 ca_cert="auth_serv/ca.pem", 158 pac_file="blob://teap_pac", 159 expect_failure=True) 160 161def test_eap_teap_basic_password_auth_user_and_machine_fail_machine(dev, apdev): 162 """EAP-TEAP with Basic-Password-Auth using user and machine credentials (fail machine)""" 163 check_eap_capa(dev[0], "TEAP") 164 params = int_teap_server_params(eap_teap_auth="1", eap_teap_id="5") 165 hapd = hostapd.add_ap(apdev[0], params) 166 eap_connect(dev[0], hapd, "TEAP", "user", password="password", 167 anonymous_identity="TEAP", 168 machine_identity="machine", 169 machine_password="wrong-machine-password", 170 ca_cert="auth_serv/ca.pem", 171 pac_file="blob://teap_pac", 172 expect_failure=True) 173 174def test_eap_teap_basic_password_auth_user_and_machine_no_machine(dev, apdev): 175 """EAP-TEAP with Basic-Password-Auth using user and machine credentials (no machine)""" 176 check_eap_capa(dev[0], "TEAP") 177 params = int_teap_server_params(eap_teap_auth="1", eap_teap_id="5") 178 hapd = hostapd.add_ap(apdev[0], params) 179 eap_connect(dev[0], hapd, "TEAP", "user", password="password", 180 anonymous_identity="TEAP", 181 ca_cert="auth_serv/ca.pem", 182 pac_file="blob://teap_pac", 183 expect_failure=True) 184 185def test_eap_teap_peer_outer_tlvs(dev, apdev): 186 """EAP-TEAP with peer Outer TLVs""" 187 check_eap_capa(dev[0], "TEAP") 188 check_eap_capa(dev[0], "MSCHAPV2") 189 params = hostapd.wpa2_eap_params(ssid="test-wpa2-eap") 190 hapd = hostapd.add_ap(apdev[0], params) 191 eap_connect(dev[0], hapd, "TEAP", "user", 192 anonymous_identity="TEAP", password="password", 193 ca_cert="auth_serv/ca.pem", phase2="auth=MSCHAPV2", 194 pac_file="blob://teap_pac", phase1="teap_test_outer_tlvs=1") 195 196def test_eap_teap_eap_mschapv2_pac(dev, apdev): 197 """EAP-TEAP with inner EAP-MSCHAPv2 and PAC provisioning""" 198 check_eap_capa(dev[0], "TEAP") 199 check_eap_capa(dev[0], "MSCHAPV2") 200 params = hostapd.wpa2_eap_params(ssid="test-wpa2-eap") 201 hapd = hostapd.add_ap(apdev[0], params) 202 eap_connect(dev[0], hapd, "TEAP", "user", 203 anonymous_identity="TEAP", password="password", 204 phase1="teap_provisioning=2", 205 ca_cert="auth_serv/ca.pem", phase2="auth=MSCHAPV2", 206 pac_file="blob://teap_pac") 207 res = eap_reauth(dev[0], "TEAP") 208 if res['tls_session_reused'] != '1': 209 raise Exception("EAP-TEAP could not use PAC session ticket") 210 211def test_eap_teap_eap_mschapv2_pac_no_inner_eap(dev, apdev): 212 """EAP-TEAP with inner EAP-MSCHAPv2 and PAC without inner EAP""" 213 check_eap_capa(dev[0], "TEAP") 214 check_eap_capa(dev[0], "MSCHAPV2") 215 params = int_teap_server_params(eap_teap_pac_no_inner="1") 216 hapd = hostapd.add_ap(apdev[0], params) 217 eap_connect(dev[0], hapd, "TEAP", "user", 218 anonymous_identity="TEAP", password="password", 219 phase1="teap_provisioning=2", 220 ca_cert="auth_serv/ca.pem", phase2="auth=MSCHAPV2", 221 pac_file="blob://teap_pac") 222 res = eap_reauth(dev[0], "TEAP") 223 if res['tls_session_reused'] != '1': 224 raise Exception("EAP-TEAP could not use PAC session ticket") 225 226def test_eap_teap_eap_mschapv2_separate_result(dev, apdev): 227 """EAP-TEAP with inner EAP-MSCHAPv2 and separate message for Result TLV""" 228 check_eap_capa(dev[0], "TEAP") 229 check_eap_capa(dev[0], "MSCHAPV2") 230 params = int_teap_server_params(eap_teap_separate_result="1") 231 hapd = hostapd.add_ap(apdev[0], params) 232 eap_connect(dev[0], hapd, "TEAP", "user", 233 anonymous_identity="TEAP", password="password", 234 ca_cert="auth_serv/ca.pem", phase2="auth=MSCHAPV2", 235 pac_file="blob://teap_pac") 236 237def test_eap_teap_eap_mschapv2_pac_no_ca_cert(dev, apdev): 238 """EAP-TEAP with inner EAP-MSCHAPv2 and PAC provisioning attempt without ca_cert""" 239 check_eap_capa(dev[0], "TEAP") 240 check_eap_capa(dev[0], "MSCHAPV2") 241 params = hostapd.wpa2_eap_params(ssid="test-wpa2-eap") 242 hapd = hostapd.add_ap(apdev[0], params) 243 eap_connect(dev[0], hapd, "TEAP", "user", 244 anonymous_identity="TEAP", password="password", 245 phase1="teap_provisioning=2", 246 phase2="auth=MSCHAPV2", 247 pac_file="blob://teap_pac") 248 res = eap_reauth(dev[0], "TEAP") 249 if res['tls_session_reused'] == '1': 250 raise Exception("Unexpected use of PAC session ticket") 251 252def test_eap_teap_eap_mschapv2_id0(dev, apdev): 253 """EAP-TEAP with inner EAP-MSCHAPv2 (eap_teap_id=0)""" 254 run_eap_teap_eap_mschapv2_id(dev, apdev, 0) 255 256def test_eap_teap_eap_mschapv2_id1(dev, apdev): 257 """EAP-TEAP with inner EAP-MSCHAPv2 (eap_teap_id=1)""" 258 run_eap_teap_eap_mschapv2_id(dev, apdev, 1) 259 260def test_eap_teap_eap_mschapv2_id2(dev, apdev): 261 """EAP-TEAP with inner EAP-MSCHAPv2 (eap_teap_id=2)""" 262 run_eap_teap_eap_mschapv2_id(dev, apdev, 2, failure=True) 263 264def test_eap_teap_eap_mschapv2_id3(dev, apdev): 265 """EAP-TEAP with inner EAP-MSCHAPv2 (eap_teap_id=3)""" 266 run_eap_teap_eap_mschapv2_id(dev, apdev, 3) 267 268def test_eap_teap_eap_mschapv2_id4(dev, apdev): 269 """EAP-TEAP with inner EAP-MSCHAPv2 (eap_teap_id=4)""" 270 run_eap_teap_eap_mschapv2_id(dev, apdev, 4) 271 272def run_eap_teap_eap_mschapv2_id(dev, apdev, eap_teap_id, failure=False): 273 check_eap_capa(dev[0], "TEAP") 274 check_eap_capa(dev[0], "MSCHAPV2") 275 params = int_teap_server_params(eap_teap_id=str(eap_teap_id)) 276 hapd = hostapd.add_ap(apdev[0], params) 277 eap_connect(dev[0], hapd, "TEAP", "user", 278 anonymous_identity="TEAP", password="password", 279 ca_cert="auth_serv/ca.pem", phase2="auth=MSCHAPV2", 280 pac_file="blob://teap_pac", 281 expect_failure=failure) 282 283def test_eap_teap_eap_mschapv2_machine(dev, apdev): 284 """EAP-TEAP with inner EAP-MSCHAPv2 using machine credential""" 285 check_eap_capa(dev[0], "TEAP") 286 check_eap_capa(dev[0], "MSCHAPV2") 287 params = int_teap_server_params(eap_teap_id="2") 288 hapd = hostapd.add_ap(apdev[0], params) 289 eap_connect(dev[0], hapd, "TEAP", "", 290 anonymous_identity="TEAP", 291 machine_identity="machine", machine_password="machine-password", 292 ca_cert="auth_serv/ca.pem", phase2="auth=MSCHAPV2", 293 pac_file="blob://teap_pac") 294 295def test_eap_teap_eap_mschapv2_user_and_machine(dev, apdev): 296 """EAP-TEAP with inner EAP-MSCHAPv2 using user and machine credentials""" 297 check_eap_capa(dev[0], "TEAP") 298 check_eap_capa(dev[0], "MSCHAPV2") 299 params = int_teap_server_params(eap_teap_id="5") 300 hapd = hostapd.add_ap(apdev[0], params) 301 eap_connect(dev[0], hapd, "TEAP", "user", password="password", 302 anonymous_identity="TEAP", 303 machine_identity="machine", machine_password="machine-password", 304 ca_cert="auth_serv/ca.pem", phase2="auth=MSCHAPV2", 305 pac_file="blob://teap_pac") 306 307def test_eap_teap_eap_mschapv2_user_and_machine_seq1(dev, apdev): 308 """EAP-TEAP with inner EAP-MSCHAPv2 using user and machine credentials (seq1)""" 309 check_eap_capa(dev[0], "TEAP") 310 check_eap_capa(dev[0], "MSCHAPV2") 311 params = int_teap_server_params(eap_teap_id="5", 312 eap_teap_method_sequence="1") 313 hapd = hostapd.add_ap(apdev[0], params) 314 eap_connect(dev[0], hapd, "TEAP", "user", password="password", 315 anonymous_identity="TEAP", 316 machine_identity="machine", machine_password="machine-password", 317 ca_cert="auth_serv/ca.pem", phase2="auth=MSCHAPV2", 318 pac_file="blob://teap_pac") 319 320def test_eap_teap_eap_mschapv2_user_and_machine_fail_user(dev, apdev): 321 """EAP-TEAP with inner EAP-MSCHAPv2 using user and machine credentials (fail user)""" 322 check_eap_capa(dev[0], "TEAP") 323 check_eap_capa(dev[0], "MSCHAPV2") 324 params = int_teap_server_params(eap_teap_id="5") 325 hapd = hostapd.add_ap(apdev[0], params) 326 eap_connect(dev[0], hapd, "TEAP", "user", password="wrong-password", 327 anonymous_identity="TEAP", 328 machine_identity="machine", machine_password="machine-password", 329 ca_cert="auth_serv/ca.pem", phase2="auth=MSCHAPV2", 330 pac_file="blob://teap_pac", 331 expect_failure=True) 332 333def test_eap_teap_eap_mschapv2_user_and_machine_fail_machine(dev, apdev): 334 """EAP-TEAP with inner EAP-MSCHAPv2 using user and machine credentials (fail machine)""" 335 check_eap_capa(dev[0], "TEAP") 336 check_eap_capa(dev[0], "MSCHAPV2") 337 params = int_teap_server_params(eap_teap_id="5") 338 hapd = hostapd.add_ap(apdev[0], params) 339 eap_connect(dev[0], hapd, "TEAP", "user", password="password", 340 anonymous_identity="TEAP", 341 machine_identity="machine", 342 machine_password="wrong-machine-password", 343 ca_cert="auth_serv/ca.pem", phase2="auth=MSCHAPV2", 344 pac_file="blob://teap_pac", 345 expect_failure=True) 346 347def test_eap_teap_eap_mschapv2_user_and_machine_no_machine(dev, apdev): 348 """EAP-TEAP with inner EAP-MSCHAPv2 using user and machine credentials (no machine)""" 349 check_eap_capa(dev[0], "TEAP") 350 check_eap_capa(dev[0], "MSCHAPV2") 351 params = int_teap_server_params(eap_teap_id="5") 352 hapd = hostapd.add_ap(apdev[0], params) 353 eap_connect(dev[0], hapd, "TEAP", "user", password="password", 354 anonymous_identity="TEAP", 355 ca_cert="auth_serv/ca.pem", phase2="auth=MSCHAPV2", 356 pac_file="blob://teap_pac", 357 expect_failure=True) 358 359def test_eap_teap_eap_mschapv2_user_and_eap_tls_machine(dev, apdev): 360 """EAP-TEAP with inner EAP-MSCHAPv2 user and EAP-TLS machine credentials""" 361 check_eap_capa(dev[0], "TEAP") 362 check_eap_capa(dev[0], "MSCHAPV2") 363 check_eap_capa(dev[0], "TLS") 364 params = int_teap_server_params(eap_teap_id="5") 365 hapd = hostapd.add_ap(apdev[0], params) 366 eap_connect(dev[0], hapd, "TEAP", "user", password="password", 367 anonymous_identity="TEAP", 368 machine_identity="cert user", 369 ca_cert="auth_serv/ca.pem", phase2="auth=MSCHAPV2", 370 machine_phase2="auth=TLS", 371 machine_ca_cert="auth_serv/ca.pem", 372 machine_client_cert="auth_serv/user.pem", 373 machine_private_key="auth_serv/user.key", 374 pac_file="blob://teap_pac") 375 376def test_eap_teap_basic_password_auth_pac(dev, apdev): 377 """EAP-TEAP with Basic-Password-Auth and PAC""" 378 check_eap_capa(dev[0], "TEAP") 379 params = int_teap_server_params(eap_teap_auth="1") 380 hapd = hostapd.add_ap(apdev[0], params) 381 eap_connect(dev[0], hapd, "TEAP", "user", 382 anonymous_identity="TEAP", password="password", 383 phase1="teap_provisioning=2", 384 ca_cert="auth_serv/ca.pem", phase2="auth=MSCHAPV2", 385 pac_file="blob://teap_pac") 386 res = eap_reauth(dev[0], "TEAP") 387 if res['tls_session_reused'] != '1': 388 raise Exception("EAP-TEAP could not use PAC session ticket") 389 390def test_eap_teap_basic_password_auth_pac_binary(dev, apdev): 391 """EAP-TEAP with Basic-Password-Auth and PAC (binary)""" 392 check_eap_capa(dev[0], "TEAP") 393 params = int_teap_server_params(eap_teap_auth="1") 394 hapd = hostapd.add_ap(apdev[0], params) 395 eap_connect(dev[0], hapd, "TEAP", "user", 396 anonymous_identity="TEAP", password="password", 397 phase1="teap_provisioning=2 teap_max_pac_list_len=2 teap_pac_format=binary", 398 ca_cert="auth_serv/ca.pem", phase2="auth=MSCHAPV2", 399 pac_file="blob://teap_pac_bin") 400 res = eap_reauth(dev[0], "TEAP") 401 if res['tls_session_reused'] != '1': 402 raise Exception("EAP-TEAP could not use PAC session ticket") 403 404def test_eap_teap_basic_password_auth_pac_no_inner_eap(dev, apdev): 405 """EAP-TEAP with Basic-Password-Auth and PAC without inner auth""" 406 check_eap_capa(dev[0], "TEAP") 407 params = int_teap_server_params(eap_teap_auth="1", 408 eap_teap_pac_no_inner="1") 409 hapd = hostapd.add_ap(apdev[0], params) 410 eap_connect(dev[0], hapd, "TEAP", "user", 411 anonymous_identity="TEAP", password="password", 412 phase1="teap_provisioning=2", 413 ca_cert="auth_serv/ca.pem", phase2="auth=MSCHAPV2", 414 pac_file="blob://teap_pac") 415 res = eap_reauth(dev[0], "TEAP") 416 if res['tls_session_reused'] != '1': 417 raise Exception("EAP-TEAP could not use PAC session ticket") 418 419def test_eap_teap_eap_eke_unauth_server_prov(dev, apdev): 420 """EAP-TEAP with inner EAP-EKE and unauthenticated server provisioning""" 421 check_eap_capa(dev[0], "TEAP") 422 check_eap_capa(dev[0], "EKE") 423 params = hostapd.wpa2_eap_params(ssid="test-wpa2-eap") 424 hapd = hostapd.add_ap(apdev[0], params) 425 eap_connect(dev[0], hapd, "TEAP", "user-eke-2", 426 anonymous_identity="TEAP", password="password", 427 phase1="teap_provisioning=1", 428 phase2="auth=EKE", pac_file="blob://teap_pac") 429 res = eap_reauth(dev[0], "TEAP") 430 if res['tls_session_reused'] != '1': 431 raise Exception("EAP-TEAP could not use PAC session ticket") 432 433def test_eap_teap_fragmentation(dev, apdev): 434 """EAP-TEAP with fragmentation""" 435 check_eap_capa(dev[0], "TEAP") 436 check_eap_capa(dev[0], "MSCHAPV2") 437 params = hostapd.wpa2_eap_params(ssid="test-wpa2-eap") 438 hapd = hostapd.add_ap(apdev[0], params) 439 eap_connect(dev[0], hapd, "TEAP", "user", 440 anonymous_identity="TEAP", password="password", 441 ca_cert="auth_serv/ca.pem", phase2="auth=MSCHAPV2", 442 pac_file="blob://teap_pac", fragment_size="100") 443 444def test_eap_teap_tls_cs_sha1(dev, apdev): 445 """EAP-TEAP with TLS cipher suite that uses SHA-1""" 446 run_eap_teap_tls_cs(dev, apdev, "AES128-SHA") 447 448def test_eap_teap_tls_cs_sha256(dev, apdev): 449 """EAP-TEAP with TLS cipher suite that uses SHA-256""" 450 run_eap_teap_tls_cs(dev, apdev, "AES128-SHA256") 451 452def test_eap_teap_tls_cs_sha384(dev, apdev): 453 """EAP-TEAP with TLS cipher suite that uses SHA-384""" 454 run_eap_teap_tls_cs(dev, apdev, "AES256-GCM-SHA384") 455 456def run_eap_teap_tls_cs(dev, apdev, cipher): 457 check_eap_capa(dev[0], "TEAP") 458 tls = dev[0].request("GET tls_library") 459 if not tls.startswith("OpenSSL") and not tls.startswith("wolfSSL"): 460 raise HwsimSkip("TLS library not supported for TLS CS configuration: " + tls) 461 params = int_teap_server_params(eap_teap_auth="1") 462 params['openssl_ciphers'] = cipher 463 hapd = hostapd.add_ap(apdev[0], params) 464 eap_connect(dev[0], hapd, "TEAP", "user", 465 anonymous_identity="TEAP", password="password", 466 ca_cert="auth_serv/ca.pem", 467 pac_file="blob://teap_pac") 468 469def wait_eap_proposed(dev, wait_trigger=None): 470 ev = dev.wait_event(["CTRL-EVENT-EAP-PROPOSED-METHOD"], timeout=10) 471 if ev is None: 472 raise Exception("Timeout on EAP start") 473 if wait_trigger: 474 wait_fail_trigger(dev, wait_trigger) 475 dev.request("REMOVE_NETWORK all") 476 dev.wait_disconnected() 477 dev.dump_monitor() 478 479def test_eap_teap_errors(dev, apdev): 480 """EAP-TEAP local errors""" 481 check_eap_capa(dev[0], "TEAP") 482 check_eap_capa(dev[0], "MSCHAPV2") 483 params = hostapd.wpa2_eap_params(ssid="test-wpa2-eap") 484 hapd = hostapd.add_ap(apdev[0], params) 485 486 dev[0].connect("test-wpa2-eap", key_mgmt="WPA-EAP", 487 scan_freq="2412", 488 eap="TEAP", identity="user", password="password", 489 anonymous_identity="TEAP", 490 ca_cert="auth_serv/ca.pem", phase2="auth=MSCHAPV2", 491 wait_connect=False) 492 wait_eap_proposed(dev[0]) 493 494 dev[0].set("blob", "teap_broken_pac 11") 495 dev[0].connect("test-wpa2-eap", key_mgmt="WPA-EAP", 496 scan_freq="2412", 497 eap="TEAP", identity="user", password="password", 498 anonymous_identity="TEAP", 499 ca_cert="auth_serv/ca.pem", phase2="auth=MSCHAPV2", 500 pac_file="blob://teap_broken_pac", wait_connect=False) 501 wait_eap_proposed(dev[0]) 502 dev[0].connect("test-wpa2-eap", key_mgmt="WPA-EAP", 503 scan_freq="2412", 504 eap="TEAP", identity="user", password="password", 505 anonymous_identity="TEAP", 506 ca_cert="auth_serv/ca.pem", phase2="auth=MSCHAPV2", 507 phase1="teap_pac_format=binary", 508 pac_file="blob://teap_broken_pac", wait_connect=False) 509 wait_eap_proposed(dev[0]) 510 511 tests = [(1, "eap_teap_tlv_eap_payload"), 512 (1, "eap_teap_process_eap_payload_tlv"), 513 (1, "eap_teap_compound_mac"), 514 (1, "eap_teap_tlv_result"), 515 (1, "eap_peer_select_phase2_methods"), 516 (1, "eap_peer_tls_ssl_init"), 517 (1, "eap_teap_session_id"), 518 (1, "wpabuf_alloc;=eap_teap_process_crypto_binding"), 519 (1, "eap_peer_tls_encrypt"), 520 (1, "eap_peer_tls_decrypt"), 521 (1, "eap_teap_getKey"), 522 (1, "eap_teap_session_id"), 523 (1, "eap_teap_init")] 524 for count, func in tests: 525 with alloc_fail(dev[0], count, func): 526 dev[0].connect("test-wpa2-eap", key_mgmt="WPA-EAP", 527 scan_freq="2412", 528 eap="TEAP", identity="user", password="password", 529 anonymous_identity="TEAP", 530 ca_cert="auth_serv/ca.pem", phase2="auth=MSCHAPV2", 531 pac_file="blob://teap_pac", wait_connect=False) 532 wait_eap_proposed(dev[0], wait_trigger="GET_ALLOC_FAIL") 533 534 tests = [(1, "eap_teap_derive_eap_msk"), 535 (1, "eap_teap_derive_eap_emsk"), 536 (1, "eap_teap_write_crypto_binding"), 537 (1, "eap_teap_process_crypto_binding"), 538 (1, "eap_teap_derive_msk;eap_teap_process_crypto_binding"), 539 (1, "eap_teap_compound_mac;eap_teap_process_crypto_binding"), 540 (1, "eap_teap_derive_imck")] 541 for count, func in tests: 542 with fail_test(dev[0], count, func): 543 dev[0].connect("test-wpa2-eap", key_mgmt="WPA-EAP", 544 scan_freq="2412", 545 eap="TEAP", identity="user", password="password", 546 anonymous_identity="TEAP", 547 ca_cert="auth_serv/ca.pem", phase2="auth=MSCHAPV2", 548 pac_file="blob://teap_pac", wait_connect=False) 549 wait_eap_proposed(dev[0], wait_trigger="GET_FAIL") 550 551def test_eap_teap_errors2(dev, apdev): 552 """EAP-TEAP local errors 2 (Basic-Password-Auth specific)""" 553 check_eap_capa(dev[0], "TEAP") 554 check_eap_capa(dev[0], "MSCHAPV2") 555 params = int_teap_server_params(eap_teap_auth="1") 556 hapd = hostapd.add_ap(apdev[0], params) 557 558 tests = [(1, "eap_teap_tlv_pac_ack"), 559 (1, "eap_teap_process_basic_auth_req")] 560 for count, func in tests: 561 with alloc_fail(dev[0], count, func): 562 dev[0].connect("test-wpa2-eap", key_mgmt="WPA-EAP", 563 scan_freq="2412", 564 eap="TEAP", identity="user", password="password", 565 anonymous_identity="TEAP", 566 phase1="teap_provisioning=2", 567 ca_cert="auth_serv/ca.pem", phase2="auth=MSCHAPV2", 568 pac_file="blob://teap_pac", wait_connect=False) 569 wait_eap_proposed(dev[0], wait_trigger="GET_ALLOC_FAIL") 570 571 tests = [(1, "eap_teap_derive_cmk_basic_pw_auth")] 572 for count, func in tests: 573 with fail_test(dev[0], count, func): 574 dev[0].connect("test-wpa2-eap", key_mgmt="WPA-EAP", 575 scan_freq="2412", 576 eap="TEAP", identity="user", password="password", 577 anonymous_identity="TEAP", 578 phase1="teap_provisioning=2", 579 ca_cert="auth_serv/ca.pem", phase2="auth=MSCHAPV2", 580 pac_file="blob://teap_pac", wait_connect=False) 581 wait_eap_proposed(dev[0], wait_trigger="GET_FAIL") 582 583def test_eap_teap_eap_vendor(dev, apdev): 584 """EAP-TEAP with inner EAP-vendor""" 585 check_eap_capa(dev[0], "TEAP") 586 check_eap_capa(dev[0], "VENDOR-TEST") 587 params = hostapd.wpa2_eap_params(ssid="test-wpa2-eap") 588 hapd = hostapd.add_ap(apdev[0], params) 589 eap_connect(dev[0], hapd, "TEAP", "vendor-test-2", 590 anonymous_identity="TEAP", 591 ca_cert="auth_serv/ca.pem", phase2="auth=VENDOR-TEST", 592 pac_file="blob://teap_pac") 593 594def test_eap_teap_client_cert(dev, apdev): 595 """EAP-TEAP with client certificate in Phase 1""" 596 check_eap_capa(dev[0], "TEAP") 597 params = int_teap_server_params(eap_teap_auth="2") 598 hapd = hostapd.add_ap(apdev[0], params) 599 600 # verify server accept a client with certificate, but no Phase 2 601 # configuration 602 eap_connect(dev[0], hapd, "TEAP", "user", 603 anonymous_identity="TEAP", 604 phase1="teap_provisioning=2", 605 client_cert="auth_serv/user.pem", 606 private_key="auth_serv/user.key", 607 ca_cert="auth_serv/ca.pem", 608 pac_file="blob://teap_pac") 609 dev[0].dump_monitor() 610 res = eap_reauth(dev[0], "TEAP") 611 if res['tls_session_reused'] != '1': 612 raise Exception("EAP-TEAP could not use PAC session ticket") 613 614 # verify server accepts a client without certificate 615 eap_connect(dev[1], hapd, "TEAP", "user", 616 anonymous_identity="TEAP", password="password", 617 ca_cert="auth_serv/ca.pem", phase2="auth=MSCHAPV2", 618 pac_file="blob://teap_pac") 619