test_ap_eap.py 9.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203
  1. #!/usr/bin/python
  2. #
  3. # WPA2-Enterprise tests
  4. # Copyright (c) 2013, Jouni Malinen <j@w1.fi>
  5. #
  6. # This software may be distributed under the terms of the BSD license.
  7. # See README for more details.
  8. import time
  9. import subprocess
  10. import logging
  11. logger = logging.getLogger(__name__)
  12. import os.path
  13. import hwsim_utils
  14. import hostapd
  15. def eap_connect(dev, method, identity, anonymous_identity=None, password=None,
  16. phase1=None, phase2=None, ca_cert=None):
  17. dev.connect("test-wpa2-eap", key_mgmt="WPA-EAP", eap=method,
  18. identity=identity, anonymous_identity=anonymous_identity,
  19. password=password, phase1=phase1, phase2=phase2,
  20. ca_cert=ca_cert,
  21. wait_connect=False)
  22. ev = dev.wait_event(["CTRL-EVENT-EAP-STARTED"], timeout=10)
  23. if ev is None:
  24. raise Exception("Association and EAP start timed out")
  25. ev = dev.wait_event(["CTRL-EVENT-EAP-METHOD"], timeout=10)
  26. if ev is None:
  27. raise Exception("EAP method selection timed out")
  28. if method not in ev:
  29. raise Exception("Unexpected EAP method")
  30. ev = dev.wait_event(["CTRL-EVENT-EAP-SUCCESS"], timeout=10)
  31. if ev is None:
  32. raise Exception("EAP success timed out")
  33. ev = dev.wait_event(["CTRL-EVENT-CONNECTED"], timeout=10)
  34. if ev is None:
  35. raise Exception("Association with the AP timed out")
  36. status = dev.get_status()
  37. if status["wpa_state"] != "COMPLETED":
  38. raise Exception("Connection not completed")
  39. if status["suppPortStatus"] != "Authorized":
  40. raise Exception("Port not authorized")
  41. if method not in status["selectedMethod"]:
  42. raise Exception("Incorrect EAP method status")
  43. if status["key_mgmt"] != "WPA2/IEEE 802.1X/EAP":
  44. raise Exception("Unexpected key_mgmt status")
  45. def test_ap_wpa2_eap_sim(dev, apdev):
  46. """WPA2-Enterprise connection using EAP-SIM"""
  47. if not os.path.exists("/tmp/hlr_auc_gw.sock"):
  48. logger.info("No hlr_auc_gw available");
  49. return "skip"
  50. params = hostapd.wpa2_eap_params(ssid="test-wpa2-eap")
  51. hostapd.add_ap(apdev[0]['ifname'], params)
  52. eap_connect(dev[0], "SIM", "1232010000000000",
  53. password="90dca4eda45b53cf0f12d7c9c3bc6a89:cb9cccc4b9258e6dca4760379fb82581")
  54. hwsim_utils.test_connectivity(dev[0].ifname, apdev[0]['ifname'])
  55. def test_ap_wpa2_eap_aka(dev, apdev):
  56. """WPA2-Enterprise connection using EAP-AKA"""
  57. if not os.path.exists("/tmp/hlr_auc_gw.sock"):
  58. logger.info("No hlr_auc_gw available");
  59. return "skip"
  60. params = hostapd.wpa2_eap_params(ssid="test-wpa2-eap")
  61. hostapd.add_ap(apdev[0]['ifname'], params)
  62. eap_connect(dev[0], "AKA", "0232010000000000",
  63. password="90dca4eda45b53cf0f12d7c9c3bc6a89:cb9cccc4b9258e6dca4760379fb82581:000000000123")
  64. hwsim_utils.test_connectivity(dev[0].ifname, apdev[0]['ifname'])
  65. def test_ap_wpa2_eap_aka_prime(dev, apdev):
  66. """WPA2-Enterprise connection using EAP-AKA'"""
  67. if not os.path.exists("/tmp/hlr_auc_gw.sock"):
  68. logger.info("No hlr_auc_gw available");
  69. return "skip"
  70. params = hostapd.wpa2_eap_params(ssid="test-wpa2-eap")
  71. hostapd.add_ap(apdev[0]['ifname'], params)
  72. eap_connect(dev[0], "AKA'", "6555444333222111",
  73. password="5122250214c33e723a5dd523fc145fc0:981d464c7c52eb6e5036234984ad0bcf:000000000123")
  74. hwsim_utils.test_connectivity(dev[0].ifname, apdev[0]['ifname'])
  75. def test_ap_wpa2_eap_ttls_pap(dev, apdev):
  76. """WPA2-Enterprise connection using EAP-TTLS/PAP"""
  77. params = hostapd.wpa2_eap_params(ssid="test-wpa2-eap")
  78. hostapd.add_ap(apdev[0]['ifname'], params)
  79. eap_connect(dev[0], "TTLS", "pap user",
  80. anonymous_identity="ttls", password="password",
  81. ca_cert="auth_serv/ca.pem", phase2="auth=PAP")
  82. hwsim_utils.test_connectivity(dev[0].ifname, apdev[0]['ifname'])
  83. def test_ap_wpa2_eap_ttls_chap(dev, apdev):
  84. """WPA2-Enterprise connection using EAP-TTLS/CHAP"""
  85. params = hostapd.wpa2_eap_params(ssid="test-wpa2-eap")
  86. hostapd.add_ap(apdev[0]['ifname'], params)
  87. eap_connect(dev[0], "TTLS", "chap user",
  88. anonymous_identity="ttls", password="password",
  89. ca_cert="auth_serv/ca.pem", phase2="auth=CHAP")
  90. hwsim_utils.test_connectivity(dev[0].ifname, apdev[0]['ifname'])
  91. def test_ap_wpa2_eap_ttls_mschap(dev, apdev):
  92. """WPA2-Enterprise connection using EAP-TTLS/MSCHAP"""
  93. params = hostapd.wpa2_eap_params(ssid="test-wpa2-eap")
  94. hostapd.add_ap(apdev[0]['ifname'], params)
  95. eap_connect(dev[0], "TTLS", "mschap user",
  96. anonymous_identity="ttls", password="password",
  97. ca_cert="auth_serv/ca.pem", phase2="auth=MSCHAP")
  98. hwsim_utils.test_connectivity(dev[0].ifname, apdev[0]['ifname'])
  99. def test_ap_wpa2_eap_ttls_mschapv2(dev, apdev):
  100. """WPA2-Enterprise connection using EAP-TTLS/MSCHAPv2"""
  101. params = hostapd.wpa2_eap_params(ssid="test-wpa2-eap")
  102. hostapd.add_ap(apdev[0]['ifname'], params)
  103. eap_connect(dev[0], "TTLS", "DOMAIN\mschapv2 user",
  104. anonymous_identity="ttls", password="password",
  105. ca_cert="auth_serv/ca.pem", phase2="auth=MSCHAPV2")
  106. hwsim_utils.test_connectivity(dev[0].ifname, apdev[0]['ifname'])
  107. def test_ap_wpa2_eap_ttls_eap_gtc(dev, apdev):
  108. """WPA2-Enterprise connection using EAP-TTLS/EAP-GTC"""
  109. params = hostapd.wpa2_eap_params(ssid="test-wpa2-eap")
  110. hostapd.add_ap(apdev[0]['ifname'], params)
  111. eap_connect(dev[0], "TTLS", "user",
  112. anonymous_identity="ttls", password="password",
  113. ca_cert="auth_serv/ca.pem", phase2="autheap=GTC")
  114. hwsim_utils.test_connectivity(dev[0].ifname, apdev[0]['ifname'])
  115. def test_ap_wpa2_eap_ttls_eap_md5(dev, apdev):
  116. """WPA2-Enterprise connection using EAP-TTLS/EAP-MD5"""
  117. params = hostapd.wpa2_eap_params(ssid="test-wpa2-eap")
  118. hostapd.add_ap(apdev[0]['ifname'], params)
  119. eap_connect(dev[0], "TTLS", "user",
  120. anonymous_identity="ttls", password="password",
  121. ca_cert="auth_serv/ca.pem", phase2="autheap=MD5")
  122. hwsim_utils.test_connectivity(dev[0].ifname, apdev[0]['ifname'])
  123. def test_ap_wpa2_eap_ttls_eap_mschapv2(dev, apdev):
  124. """WPA2-Enterprise connection using EAP-TTLS/EAP-MSCHAPv2"""
  125. params = hostapd.wpa2_eap_params(ssid="test-wpa2-eap")
  126. hostapd.add_ap(apdev[0]['ifname'], params)
  127. eap_connect(dev[0], "TTLS", "user",
  128. anonymous_identity="ttls", password="password",
  129. ca_cert="auth_serv/ca.pem", phase2="autheap=MSCHAPV2")
  130. hwsim_utils.test_connectivity(dev[0].ifname, apdev[0]['ifname'])
  131. def test_ap_wpa2_eap_peap_eap_mschapv2(dev, apdev):
  132. """WPA2-Enterprise connection using EAP-PEAP/EAP-MSCHAPv2"""
  133. params = hostapd.wpa2_eap_params(ssid="test-wpa2-eap")
  134. hostapd.add_ap(apdev[0]['ifname'], params)
  135. eap_connect(dev[0], "PEAP", "user",
  136. anonymous_identity="ttls", password="password",
  137. ca_cert="auth_serv/ca.pem", phase2="auth=MSCHAPV2")
  138. hwsim_utils.test_connectivity(dev[0].ifname, apdev[0]['ifname'])
  139. def test_ap_wpa2_eap_tls_neg_incorrect_trust_root(dev, apdev):
  140. """WPA2-Enterprise negative test - incorrect trust root"""
  141. params = hostapd.wpa2_eap_params(ssid="test-wpa2-eap")
  142. hostapd.add_ap(apdev[0]['ifname'], params)
  143. dev[0].connect("test-wpa2-eap", key_mgmt="WPA-EAP", eap="TTLS",
  144. identity="DOMAIN\mschapv2 user", anonymous_identity="ttls",
  145. password="password", phase2="auth=MSCHAPV2",
  146. ca_cert="auth_serv/ca-incorrect.pem",
  147. wait_connect=False)
  148. ev = dev[0].wait_event(["CTRL-EVENT-EAP-STARTED"], timeout=10)
  149. if ev is None:
  150. raise Exception("Association and EAP start timed out")
  151. ev = dev[0].wait_event(["CTRL-EVENT-EAP-METHOD"], timeout=10)
  152. if ev is None:
  153. raise Exception("EAP method selection timed out")
  154. if "TTLS" not in ev:
  155. raise Exception("Unexpected EAP method")
  156. ev = dev[0].wait_event(["CTRL-EVENT-EAP-TLS-CERT-ERROR",
  157. "CTRL-EVENT-EAP-SUCCESS",
  158. "CTRL-EVENT-EAP-FAILURE",
  159. "CTRL-EVENT-CONNECTED",
  160. "CTRL-EVENT-DISCONNECTED"], timeout=10)
  161. if ev is None:
  162. raise Exception("EAP result timed out")
  163. if "CTRL-EVENT-EAP-TLS-CERT-ERROR" not in ev:
  164. raise Exception("TLS certificate error not reported")
  165. ev = dev[0].wait_event(["CTRL-EVENT-EAP-SUCCESS",
  166. "CTRL-EVENT-EAP-FAILURE",
  167. "CTRL-EVENT-CONNECTED",
  168. "CTRL-EVENT-DISCONNECTED"], timeout=10)
  169. if ev is None:
  170. raise Exception("EAP result(2) timed out")
  171. if "CTRL-EVENT-EAP-FAILURE" not in ev:
  172. raise Exception("EAP failure not reported")
  173. ev = dev[0].wait_event(["CTRL-EVENT-CONNECTED",
  174. "CTRL-EVENT-DISCONNECTED"], timeout=10)
  175. if ev is None:
  176. raise Exception("EAP result(3) timed out")
  177. if "CTRL-EVENT-DISCONNECTED" not in ev:
  178. raise Exception("Disconnection not reported")
  179. ev = dev[0].wait_event(["CTRL-EVENT-SSID-TEMP-DISABLED"], timeout=10)
  180. if ev is None:
  181. raise Exception("Network block disabling not reported")