123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631 |
- wpa_supplicant and Hotspot 2.0
- ==============================
- This document describe how the IEEE 802.11u Interworking and Wi-Fi
- Hotspot 2.0 (Release 1) implementation in wpa_supplicant can be
- configured and how an external component on the client e.g., management
- GUI or Wi-Fi framework) is used to manage this functionality.
- Introduction to Wi-Fi Hotspot 2.0
- ---------------------------------
- Hotspot 2.0 is the name of the Wi-Fi Alliance specification that is used
- in the Wi-Fi CERTIFIED Passpoint<TM> program. More information about
- this is available in this white paper:
- http://www.wi-fi.org/knowledge-center/white-papers/wi-fi-certified-passpoint%E2%84%A2-new-program-wi-fi-alliance%C2%AE-enable-seamless
- The Hotspot 2.0 specification is also available from WFA:
- https://www.wi-fi.org/knowledge-center/published-specifications
- The core Interworking functionality (network selection, GAS/ANQP) were
- standardized in IEEE Std 802.11u-2011 which is now part of the IEEE Std
- 802.11-2012.
- wpa_supplicant network selection
- --------------------------------
- Interworking support added option for configuring credentials that can
- work with multiple networks as an alternative to configuration of
- network blocks (e.g., per-SSID parameters). When requested to perform
- network selection, wpa_supplicant picks the highest priority enabled
- network block or credential. If a credential is picked (based on ANQP
- information from APs), a temporary network block is created
- automatically for the matching network. This temporary network block is
- used similarly to the network blocks that can be configured by the user,
- but it is not stored into the configuration file and is meant to be used
- only for temporary period of time since a new one can be created
- whenever needed based on ANQP information and the credential.
- By default, wpa_supplicant is not using automatic network selection
- unless requested explicitly with the interworking_select command. This
- can be changed with the auto_interworking=1 parameter to perform network
- selection automatically whenever trying to find a network for connection
- and none of the enabled network blocks match with the scan results. This
- case works similarly to "interworking_select auto", i.e., wpa_supplicant
- will internally determine which network or credential is going to be
- used based on configured priorities, scan results, and ANQP information.
- wpa_supplicant configuration
- ----------------------------
- Interworking and Hotspot 2.0 functionality are optional components that
- need to be enabled in the wpa_supplicant build configuration
- (.config). This is done by adding following parameters into that file:
- CONFIG_INTERWORKING=y
- CONFIG_HS20=y
- It should be noted that this functionality requires a driver that
- supports GAS/ANQP operations. This uses the same design as P2P, i.e.,
- Action frame processing and building in user space within
- wpa_supplicant. The Linux nl80211 driver interface provides the needed
- functionality for this.
- There are number of run-time configuration parameters (e.g., in
- wpa_supplicant.conf when using the configuration file) that can be used
- to control Hotspot 2.0 operations.
- # Enable Interworking
- interworking=1
- # Enable Hotspot 2.0
- hs20=1
- # Parameters for controlling scanning
- # Homogenous ESS identifier
- # If this is set, scans will be used to request response only from BSSes
- # belonging to the specified Homogeneous ESS. This is used only if interworking
- # is enabled.
- #hessid=00:11:22:33:44:55
- # Access Network Type
- # When Interworking is enabled, scans can be limited to APs that advertise the
- # specified Access Network Type (0..15; with 15 indicating wildcard match).
- # This value controls the Access Network Type value in Probe Request frames.
- #access_network_type=15
- # Automatic network selection behavior
- # 0 = do not automatically go through Interworking network selection
- # (i.e., require explicit interworking_select command for this; default)
- # 1 = perform Interworking network selection if one or more
- # credentials have been configured and scan did not find a
- # matching network block
- #auto_interworking=0
- Credentials can be pre-configured for automatic network selection:
- # credential block
- #
- # Each credential used for automatic network selection is configured as a set
- # of parameters that are compared to the information advertised by the APs when
- # interworking_select and interworking_connect commands are used.
- #
- # credential fields:
- #
- # temporary: Whether this credential is temporary and not to be saved
- #
- # priority: Priority group
- # By default, all networks and credentials get the same priority group
- # (0). This field can be used to give higher priority for credentials
- # (and similarly in struct wpa_ssid for network blocks) to change the
- # Interworking automatic networking selection behavior. The matching
- # network (based on either an enabled network block or a credential)
- # with the highest priority value will be selected.
- #
- # pcsc: Use PC/SC and SIM/USIM card
- #
- # realm: Home Realm for Interworking
- #
- # username: Username for Interworking network selection
- #
- # password: Password for Interworking network selection
- #
- # ca_cert: CA certificate for Interworking network selection
- #
- # client_cert: File path to client certificate file (PEM/DER)
- # This field is used with Interworking networking selection for a case
- # where client certificate/private key is used for authentication
- # (EAP-TLS). Full path to the file should be used since working
- # directory may change when wpa_supplicant is run in the background.
- #
- # Alternatively, a named configuration blob can be used by setting
- # this to blob://blob_name.
- #
- # private_key: File path to client private key file (PEM/DER/PFX)
- # When PKCS#12/PFX file (.p12/.pfx) is used, client_cert should be
- # commented out. Both the private key and certificate will be read
- # from the PKCS#12 file in this case. Full path to the file should be
- # used since working directory may change when wpa_supplicant is run
- # in the background.
- #
- # Windows certificate store can be used by leaving client_cert out and
- # configuring private_key in one of the following formats:
- #
- # cert://substring_to_match
- #
- # hash://certificate_thumbprint_in_hex
- #
- # For example: private_key="hash://63093aa9c47f56ae88334c7b65a4"
- #
- # Note that when running wpa_supplicant as an application, the user
- # certificate store (My user account) is used, whereas computer store
- # (Computer account) is used when running wpasvc as a service.
- #
- # Alternatively, a named configuration blob can be used by setting
- # this to blob://blob_name.
- #
- # private_key_passwd: Password for private key file
- #
- # imsi: IMSI in <MCC> | <MNC> | '-' | <MSIN> format
- #
- # milenage: Milenage parameters for SIM/USIM simulator in <Ki>:<OPc>:<SQN>
- # format
- #
- # domain_suffix_match: Constraint for server domain name
- # If set, this FQDN is used as a suffix match requirement for the AAA
- # server certificate in SubjectAltName dNSName element(s). If a
- # matching dNSName is found, this constraint is met. If no dNSName
- # values are present, this constraint is matched against SubjectName CN
- # using same suffix match comparison. Suffix match here means that the
- # host/domain name is compared one label at a time starting from the
- # top-level domain and all the labels in @domain_suffix_match shall be
- # included in the certificate. The certificate may include additional
- # sub-level labels in addition to the required labels.
- #
- # For example, domain_suffix_match=example.com would match
- # test.example.com but would not match test-example.com.
- #
- # domain: Home service provider FQDN(s)
- # This is used to compare against the Domain Name List to figure out
- # whether the AP is operated by the Home SP. Multiple domain entries can
- # be used to configure alternative FQDNs that will be considered home
- # networks.
- #
- # roaming_consortium: Roaming Consortium OI
- # If roaming_consortium_len is non-zero, this field contains the
- # Roaming Consortium OI that can be used to determine which access
- # points support authentication with this credential. This is an
- # alternative to the use of the realm parameter. When using Roaming
- # Consortium to match the network, the EAP parameters need to be
- # pre-configured with the credential since the NAI Realm information
- # may not be available or fetched.
- #
- # eap: Pre-configured EAP method
- # This optional field can be used to specify which EAP method will be
- # used with this credential. If not set, the EAP method is selected
- # automatically based on ANQP information (e.g., NAI Realm).
- #
- # phase1: Pre-configure Phase 1 (outer authentication) parameters
- # This optional field is used with like the 'eap' parameter.
- #
- # phase2: Pre-configure Phase 2 (inner authentication) parameters
- # This optional field is used with like the 'eap' parameter.
- #
- # excluded_ssid: Excluded SSID
- # This optional field can be used to excluded specific SSID(s) from
- # matching with the network. Multiple entries can be used to specify more
- # than one SSID.
- #
- # roaming_partner: Roaming partner information
- # This optional field can be used to configure preferences between roaming
- # partners. The field is a string in following format:
- # <FQDN>,<0/1 exact match>,<priority>,<* or country code>
- # (non-exact match means any subdomain matches the entry; priority is in
- # 0..255 range with 0 being the highest priority)
- #
- # update_identifier: PPS MO ID
- # (Hotspot 2.0 PerProviderSubscription/UpdateIdentifier)
- #
- # provisioning_sp: FQDN of the SP that provisioned the credential
- # This optional field can be used to keep track of the SP that provisioned
- # the credential to find the PPS MO (./Wi-Fi/<provisioning_sp>).
- #
- # sp_priority: Credential priority within a provisioning SP
- # This is the priority of the credential among all credentials
- # provisioned by the same SP (i.e., for entries that have identical
- # provisioning_sp value). The range of this priority is 0-255 with 0
- # being the highest and 255 the lower priority.
- #
- # Minimum backhaul threshold (PPS/<X+>/Policy/MinBackhauldThreshold/*)
- # These fields can be used to specify minimum download/upload backhaul
- # bandwidth that is preferred for the credential. This constraint is
- # ignored if the AP does not advertise WAN Metrics information or if the
- # limit would prevent any connection. Values are in kilobits per second.
- # min_dl_bandwidth_home
- # min_ul_bandwidth_home
- # min_dl_bandwidth_roaming
- # min_ul_bandwidth_roaming
- #
- # max_bss_load: Maximum BSS Load Channel Utilization (1..255)
- # (PPS/<X+>/Policy/MaximumBSSLoadValue)
- # This value is used as the maximum channel utilization for network
- # selection purposes for home networks. If the AP does not advertise
- # BSS Load or if the limit would prevent any connection, this constraint
- # will be ignored.
- #
- # req_conn_capab: Required connection capability
- # (PPS/<X+>/Policy/RequiredProtoPortTuple)
- # This value is used to configure set of required protocol/port pairs that
- # a roaming network shall support (include explicitly in Connection
- # Capability ANQP element). This constraint is ignored if the AP does not
- # advertise Connection Capability or if this constraint would prevent any
- # network connection. This policy is not used in home networks.
- # Format: <protocol>[:<comma-separated list of ports]
- # Multiple entries can be used to list multiple requirements.
- # For example, number of common TCP protocols:
- # req_conn_capab=6:22,80,443
- # For example, IPSec/IKE:
- # req_conn_capab=17:500
- # req_conn_capab=50
- #
- # ocsp: Whether to use/require OCSP to check server certificate
- # 0 = do not use OCSP stapling (TLS certificate status extension)
- # 1 = try to use OCSP stapling, but not require response
- # 2 = require valid OCSP stapling response
- #
- # sim_num: Identifier for which SIM to use in multi-SIM devices
- #
- # for example:
- #
- #cred={
- # realm="example.com"
- # username="user@example.com"
- # password="password"
- # ca_cert="/etc/wpa_supplicant/ca.pem"
- # domain="example.com"
- # domain_suffix_match="example.com"
- #}
- #
- #cred={
- # imsi="310026-000000000"
- # milenage="90dca4eda45b53cf0f12d7c9c3bc6a89:cb9cccc4b9258e6dca4760379fb82"
- #}
- #
- #cred={
- # realm="example.com"
- # username="user"
- # password="password"
- # ca_cert="/etc/wpa_supplicant/ca.pem"
- # domain="example.com"
- # roaming_consortium=223344
- # eap=TTLS
- # phase2="auth=MSCHAPV2"
- #}
- Control interface
- -----------------
- wpa_supplicant provides a control interface that can be used from
- external programs to manage various operations. The included command
- line tool, wpa_cli, can be used for manual testing with this interface.
- Following wpa_cli interactive mode commands show some examples of manual
- operations related to Hotspot 2.0:
- Remove configured networks and credentials:
- > remove_network all
- OK
- > remove_cred all
- OK
- Add a username/password credential:
- > add_cred
- 0
- > set_cred 0 realm "mail.example.com"
- OK
- > set_cred 0 username "username"
- OK
- > set_cred 0 password "password"
- OK
- > set_cred 0 priority 1
- OK
- > set_cred 0 temporary 1
- OK
- Add a SIM credential using a simulated SIM/USIM card for testing:
- > add_cred
- 1
- > set_cred 1 imsi "23456-0000000000"
- OK
- > set_cred 1 milenage "90dca4eda45b53cf0f12d7c9c3bc6a89:cb9cccc4b9258e6dca4760379fb82581:000000000123"
- OK
- > set_cred 1 priority 1
- OK
- Note: the return value of add_cred is used as the first argument to
- the following set_cred commands.
- Add a SIM credential using a external SIM/USIM processing:
- > set external_sim 1
- OK
- > add_cred
- 1
- > set_cred 1 imsi "23456-0000000000"
- OK
- > set_cred 1 eap SIM
- OK
- Add a WPA2-Enterprise network:
- > add_network
- 0
- > set_network 0 key_mgmt WPA-EAP
- OK
- > set_network 0 ssid "enterprise"
- OK
- > set_network 0 eap TTLS
- OK
- > set_network 0 anonymous_identity "anonymous"
- OK
- > set_network 0 identity "user"
- OK
- > set_network 0 password "password"
- OK
- > set_network 0 priority 0
- OK
- > enable_network 0 no-connect
- OK
- Add an open network:
- > add_network
- 3
- > set_network 3 key_mgmt NONE
- OK
- > set_network 3 ssid "coffee-shop"
- OK
- > select_network 3
- OK
- Note: the return value of add_network is used as the first argument to
- the following set_network commands.
- The preferred credentials/networks can be indicated with the priority
- parameter (1 is higher priority than 0).
- Interworking network selection can be started with interworking_select
- command. This instructs wpa_supplicant to run a network scan and iterate
- through the discovered APs to request ANQP information from the APs that
- advertise support for Interworking/Hotspot 2.0:
- > interworking_select
- OK
- <3>Starting ANQP fetch for 02:00:00:00:01:00
- <3>RX-ANQP 02:00:00:00:01:00 ANQP Capability list
- <3>RX-ANQP 02:00:00:00:01:00 Roaming Consortium list
- <3>RX-HS20-ANQP 02:00:00:00:01:00 HS Capability List
- <3>ANQP fetch completed
- <3>INTERWORKING-AP 02:00:00:00:01:00 type=unknown
- INTERWORKING-AP event messages indicate the APs that support network
- selection and for which there is a matching
- credential. interworking_connect command can be used to select a network
- to connect with:
- > interworking_connect 02:00:00:00:01:00
- OK
- <3>CTRL-EVENT-SCAN-RESULTS
- <3>SME: Trying to authenticate with 02:00:00:00:01:00 (SSID='Example Network' freq=2412 MHz)
- <3>Trying to associate with 02:00:00:00:01:00 (SSID='Example Network' freq=2412 MHz)
- <3>Associated with 02:00:00:00:01:00
- <3>CTRL-EVENT-EAP-STARTED EAP authentication started
- <3>CTRL-EVENT-EAP-PROPOSED-METHOD vendor=0 method=21
- <3>CTRL-EVENT-EAP-METHOD EAP vendor 0 method 21 (TTLS) selected
- <3>CTRL-EVENT-EAP-SUCCESS EAP authentication completed successfully
- <3>WPA: Key negotiation completed with 02:00:00:00:01:00 [PTK=CCMP GTK=CCMP]
- <3>CTRL-EVENT-CONNECTED - Connection to 02:00:00:00:01:00 completed (auth) [id=0 id_str=]
- wpa_supplicant creates a temporary network block for the selected
- network based on the configured credential and ANQP information from the
- AP:
- > list_networks
- network id / ssid / bssid / flags
- 0 Example Network any [CURRENT]
- > get_network 0 key_mgmt
- WPA-EAP
- > get_network 0 eap
- TTLS
- Alternatively to using an external program to select the network,
- "interworking_select auto" command can be used to request wpa_supplicant
- to select which network to use based on configured priorities:
- > remove_network all
- OK
- <3>CTRL-EVENT-DISCONNECTED bssid=02:00:00:00:01:00 reason=1 locally_generated=1
- > interworking_select auto
- OK
- <3>Starting ANQP fetch for 02:00:00:00:01:00
- <3>RX-ANQP 02:00:00:00:01:00 ANQP Capability list
- <3>RX-ANQP 02:00:00:00:01:00 Roaming Consortium list
- <3>RX-HS20-ANQP 02:00:00:00:01:00 HS Capability List
- <3>ANQP fetch completed
- <3>INTERWORKING-AP 02:00:00:00:01:00 type=unknown
- <3>CTRL-EVENT-SCAN-RESULTS
- <3>SME: Trying to authenticate with 02:00:00:00:01:00 (SSID='Example Network' freq=2412 MHz)
- <3>Trying to associate with 02:00:00:00:01:00 (SSID='Example Network' freq=2412 MHz)
- <3>Associated with 02:00:00:00:01:00
- <3>CTRL-EVENT-EAP-STARTED EAP authentication started
- <3>CTRL-EVENT-EAP-PROPOSED-METHOD vendor=0 method=21
- <3>CTRL-EVENT-EAP-METHOD EAP vendor 0 method 21 (TTLS) selected
- <3>CTRL-EVENT-EAP-SUCCESS EAP authentication completed successfully
- <3>WPA: Key negotiation completed with 02:00:00:00:01:00 [PTK=CCMP GTK=CCMP]
- <3>CTRL-EVENT-CONNECTED - Connection to 02:00:00:00:01:00 completed (reauth) [id=0 id_str=]
- The connection status can be shown with the status command:
- > status
- bssid=02:00:00:00:01:00
- ssid=Example Network
- id=0
- mode=station
- pairwise_cipher=CCMP <--- link layer security indication
- group_cipher=CCMP
- key_mgmt=WPA2/IEEE 802.1X/EAP
- wpa_state=COMPLETED
- p2p_device_address=02:00:00:00:00:00
- address=02:00:00:00:00:00
- hs20=1 <--- HS 2.0 indication
- Supplicant PAE state=AUTHENTICATED
- suppPortStatus=Authorized
- EAP state=SUCCESS
- selectedMethod=21 (EAP-TTLS)
- EAP TLS cipher=AES-128-SHA
- EAP-TTLSv0 Phase2 method=PAP
- > status
- bssid=02:00:00:00:02:00
- ssid=coffee-shop
- id=3
- mode=station
- pairwise_cipher=NONE
- group_cipher=NONE
- key_mgmt=NONE
- wpa_state=COMPLETED
- p2p_device_address=02:00:00:00:00:00
- address=02:00:00:00:00:00
- Note: The Hotspot 2.0 indication is shown as "hs20=1" in the status
- command output. Link layer security is indicated with the
- pairwise_cipher (CCMP = secure, NONE = no encryption used).
- Also the scan results include the Hotspot 2.0 indication:
- > scan_results
- bssid / frequency / signal level / flags / ssid
- 02:00:00:00:01:00 2412 -30 [WPA2-EAP-CCMP][ESS][HS20] Example Network
- ANQP information for the BSS can be fetched using the BSS command:
- > bss 02:00:00:00:01:00
- id=1
- bssid=02:00:00:00:01:00
- freq=2412
- beacon_int=100
- capabilities=0x0411
- qual=0
- noise=-92
- level=-30
- tsf=1345573286517276
- age=105
- ie=000f4578616d706c65204e6574776f726b010882848b960c1218240301012a010432043048606c30140100000fac040100000fac040100000fac0100007f04000000806b091e07010203040506076c027f006f1001531122331020304050010203040506dd05506f9a1000
- flags=[WPA2-EAP-CCMP][ESS][HS20]
- ssid=Example Network
- anqp_roaming_consortium=031122330510203040500601020304050603fedcba
- ANQP queries can also be requested with the anqp_get and hs20_anqp_get
- commands:
- > anqp_get 02:00:00:00:01:00 261
- OK
- <3>RX-ANQP 02:00:00:00:01:00 Roaming Consortium list
- > hs20_anqp_get 02:00:00:00:01:00 2
- OK
- <3>RX-HS20-ANQP 02:00:00:00:01:00 HS Capability List
- In addition, fetch_anqp command can be used to request similar set of
- ANQP queries to be done as is run as part of interworking_select:
- > scan
- OK
- <3>CTRL-EVENT-SCAN-RESULTS
- > fetch_anqp
- OK
- <3>Starting ANQP fetch for 02:00:00:00:01:00
- <3>RX-ANQP 02:00:00:00:01:00 ANQP Capability list
- <3>RX-ANQP 02:00:00:00:01:00 Roaming Consortium list
- <3>RX-HS20-ANQP 02:00:00:00:01:00 HS Capability List
- <3>ANQP fetch completed
- Hotspot 2.0 Rel 2 online signup and OSEN
- ----------------------------------------
- Following parameters can be used to create a network profile for
- link-layer protected Hotspot 2.0 online signup connection with
- OSEN. Note that ssid and identify (NAI) values need to be set based on
- the information for the selected provider in the OSU Providers list
- ANQP-element.
- network={
- ssid="HS 2.0 OSU"
- proto=OSEN
- key_mgmt=OSEN
- pairwise=CCMP
- group=GTK_NOT_USED
- eap=WFA-UNAUTH-TLS
- identity="anonymous@example.com"
- ca_cert="osu-ca.pem"
- ocsp=2
- }
- Hotspot 2.0 connection with external network selection
- ------------------------------------------------------
- When an component controlling wpa_supplicant takes care of Interworking
- network selection, following configuration and network profile
- parameters can be used to configure a temporary network profile for a
- Hotspot 2.0 connection (e.g., with SET, ADD_NETWORK, SET_NETWORK, and
- SELECT_NETWORK control interface commands):
- interworking=1
- hs20=1
- auto_interworking=0
- network={
- ssid="test-hs20"
- proto=RSN
- key_mgmt=WPA-EAP
- pairwise=CCMP
- anonymous_identity="anonymous@example.com"
- identity="hs20-test@example.com"
- password="password"
- ca_cert="ca.pem"
- eap=TTLS
- phase2="auth=MSCHAPV2"
- update_identifier=54321
- #ocsp=2
- }
- These parameters are set based on the PPS MO credential and/or NAI Realm
- list ANQP-element:
- anonymous_identity: Credential/UsernamePassword/Username with username part
- replaced with "anonymous"
- identity: Credential/UsernamePassword/Username
- password: Credential/UsernamePassword/Password
- update_identifier: PPS/UpdateIdentifier
- ca_cert: from the downloaded trust root based on PPS information
- eap: Credential/UsernamePassword/EAPMethod or NAI Realm list
- phase2: Credential/UsernamePassword/EAPMethod or NAI Realm list
- ocsp: Credential/CheckAAAServerCertStatus
|