Passpoint è un protocollo Wi-Fi Alliance (WFA) che consente ai dispositivi mobili di rilevare e autenticarsi agli hotspot Wi-Fi che forniscono l'accesso a internet.
Assistenza per i dispositivi
Per supportare Passpoint, i produttori di dispositivi devono implementare
l'interfaccia Supplicant. A partire da Android 13,
l'interfaccia utilizza AIDL per la definizione HAL.
Per le release precedenti ad Android 13,
le interfacce e le partizioni fornitore utilizzano HIDL.
I file HIDL si trovano in hardware/interfaces/supplicant/1.x
e i file AIDL in hardware/interfaces/supplicant/aidl
.
Il supplicant supporta lo standard 802.11u, in particolare le funzionalità di rilevamento e selezione della rete, come il servizio di pubblicità generica (GAS) e il protocollo di query della rete di accesso (ANQP).
Implementazione
Android 11 o versioni successive
Per supportare Passpoint sui dispositivi con Android 11 o versioni successive, i produttori di dispositivi devono fornire il supporto del firmware per 802.11u. Tutti gli altri requisiti per il supporto di Passpoint sono inclusi in AOSP.
Android 10 o versioni precedenti
Per i dispositivi con Android 10 o versioni precedenti, i produttori di dispositivi devono fornire il supporto sia per il framework sia per HAL/firmware:
- Framework: attiva Passpoint (richiede un flag funzionalità)
- Firmware: supporto per 802.11u
Per supportare Passpoint, implementa l'HAL Wi-Fi e attiva il flag della funzionalità per
Passpoint. In device.mk
che si trova in device/<oem>/<device>
, modifica la
variabile di ambiente PRODUCT_COPY_FILES
in modo da includere il supporto per la
funzionalità Passpoint:
PRODUCT_COPY_FILES +=
frameworks/native/data/etc/android.hardware.wifi.passpoint.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.wifi.passpoint.xml
Tutti gli altri requisiti per il supporto di Passpoint sono inclusi in AOSP.
Convalida
Per convalidare l'implementazione della funzionalità Passpoint, esegui i seguenti test delle unità del pacchetto Passpoint:
Test del servizio:
atest com.android.server.wifi.hotspot2
Test del gestore:
atest android.net.wifi.hotspot2
Provisioning Passpoint R1
Android supporta Passpoint R1 a partire da Android 6.0, consentendo il provisioning delle credenziali Passpoint R1 (release 1) tramite il download basato sul web di un file speciale contenente le informazioni del profilo e delle credenziali. Il client avvia automaticamente un programma di installazione speciale per le informazioni Wi-Fi e consente all'utente di visualizzare parti delle informazioni prima di accettare o rifiutare i contenuti.
Le informazioni del profilo contenute nel file vengono utilizzate per la corrispondenza con i dati recuperati dai punti di accesso abilitati per Passpoint e le credenziali vengono applicate automaticamente a qualsiasi rete corrispondente.
L'implementazione di riferimento di Android supporta EAP-TTLS, EAP-TLS, EAP-SIM, EAP-AKA ed EAP-AKA'.
Meccanismo di download
Il file di configurazione Passpoint deve essere ospitato su un server web e deve essere protetto con TLS (HTTPS) perché potrebbe contenere password in testo normale o dati di chiavi private. I contenuti sono costituiti da testo MIME multipart avvolto rappresentato in UTF-8 e codificato in base64 in base alla sezione 6.8 di RFC-2045.
I seguenti campi di intestazione HTTP vengono utilizzati dal client per avviare automaticamente un programma di installazione Wi-Fi sul dispositivo:
Content-Type
deve essere impostato suapplication/x-wifi-config
.Content-Transfer-Encoding
deve essere impostato subase64
.Content-Disposition
non deve essere impostato.
Il metodo HTTP utilizzato per recuperare il file deve essere GET. Ogni volta che un HTTP GET dal browser riceve una risposta con queste intestazioni MIME, viene avviata l'app di installazione. Il download deve essere attivato toccando un elemento HTML come un pulsante (i reindirizzamenti automatici a un URL di download non sono supportati). Questo comportamento è specifico di Google Chrome; altri browser web potrebbero fornire o meno funzionalità simili.
Composizione del file
Il contenuto codificato in Base64 deve essere costituito da contenuti MIME multipart con un
Content-Type
di multipart/mixed
. Le seguenti parti costituiscono le singole
parti del contenuto in più parti.
Parte | Content-Type (meno virgolette) | Obbligatorio | Descrizione |
---|---|---|---|
Profilo |
application/x-passpoint-profile
|
Sempre | Payload in formato SyncML OMA-DM contenente l'oggetto MO in formato Passpoint R1
PerProviderSubscription per HomeSP
e Credential . |
Certificato Trust |
application/x-x509-ca-cert
|
Obbligatorio per EAP-TLS ed EAP-TTLS | Un singolo payload del certificato X.509v3 con codifica Base64. |
Chiave EAP-TLS |
application/x-pkcs12
|
Obbligatorio per EAP-TLS | Una struttura ASN.1 PKCS #12 con codifica base64 contenente una catena di certificati client con almeno il certificato client e la chiave privata associata. Il contenitore PKCS 12, la chiave privata e i certificati devono essere tutti in testo normale senza password. |
La sezione Profilo deve essere trasferita come testo XML con codifica UTF-8 e base64
che specifica le parti degli alberi secondari HomeSP
e Credential
nella
specifica tecnica Passpoint R2 versione 1.0.0, sezione 9.1.
Il nodo di primo livello deve essere MgmtTree
e il nodo secondario immediato deve essere
PerProviderSubscription
. Un file XML di esempio viene visualizzato in
Esempio di profilo XML OMA-DM.
I seguenti nodi dell'albero secondario vengono utilizzati in HomeSP
:
FriendlyName
: deve essere impostato; viene utilizzato come testo visualizzatoFQDN
: ObbligatorioRoamingConsortiumOI
I seguenti nodi dell'albero secondario vengono utilizzati in Credential
:
Realm
: deve essere una stringa non vuotaUsernamePassword
: obbligatorio per EAP-TTLS con i seguenti nodi impostati:Username
: stringa contenente il nome utentePassword
: stringa codificata in Base64 (impostata sucGFzc3dvcmQ=
, la stringa codificata in Base64 per "password", nell'esempio riportato di seguito)EAPMethod/EAPType
: deve essere impostato su21
EAPMethod/InnerMethod
: deve essere impostato su uno dei seguenti valori:PAP
,CHAP
,MS-CHAP
oMS-CHAP-V2
DigitalCertificate
: obbligatorio per EAP-TLS. Devono essere impostati i seguenti nodi:CertificateType
impostato alle orex509v3
CertSHA256Fingerprint
impostato sul digest SHA-256 corretto del client certificato nella sezione MIME della chiave EAP-TLS
SIM
: obbligatorio per EAP-SIM, EAP-AKA ed EAP-AKA'. Il campoEAPType
deve essere impostato sul tipo EAP appropriato eIMSI
deve corrispondere a un IMSI di una delle schede SIM installate nel dispositivo al momento del provisioning. La stringa IMSI può essere costituita interamente da cifre decimali per forzare la corrispondenza di uguaglianza completa oppure da 5 o 6 cifre decimali seguite da un asterisco (*) per rendere la corrispondenza IMSI limitata a MCC/MNC. Ad esempio, la stringa IMSI 123456* corrisponde a qualsiasi scheda SIM con MCC 123 e MNC 456.
Android 11 introduce funzionalità che rendono il provisioning di Passpoint R1 più flessibile.
- Nome di dominio separato per autenticazione, autorizzazione e contabilità (AAA)
Gli amministratori di rete Passpoint che richiedono un nome di dominio AAA specificato indipendentemente dal nome di dominio completo (FQDN) pubblicizzato dalla rete tramite Access Network Query Protocol (ANQP) possono specificare un elenco di FQDN separati da punto e virgola in un nuovo nodo sotto l'albero secondario
Extension
. Questo è un nodo facoltativo e i dispositivi con Android versione 10 o precedenti lo ignorano.
Android
: Sottoalbero dell'estensione AndroidAAAServerTrustedNames
: Obbligatorio per i nomi attendibili del server AAA con il seguente set di nodi impostato:FQDN
: stringa che contiene i nomi attendibili del server AAA. Utilizza i punti e virgola per separare i nomi attendibili. Ad esempio,example.org;example.com
.
- CA radice private autofirmate
- Gli amministratori di rete Passpoint che gestiscono internamente i propri certificati possono eseguire il provisioning dei profili con una CA autofirmata privata per l'autenticazione AAA.
- Consenti l'installazione di profili senza un certificato CA radice
- Il certificato CA radice allegato al profilo viene utilizzato per l'autenticazione del server AAA. Gli amministratori di rete Passpoint che vogliono fare affidamento su CA radice attendibili pubbliche per l'autenticazione del server AAA possono eseguire il provisioning dei profili senza un certificato CA radice. In questo caso, il sistema verifica i certificati del server AAA in base ai certificati CA radice pubblici installati nell'archivio attendibilità.
Provisioning Passpoint R2
Android 10 ha introdotto il supporto per le funzionalità di Passpoint R2. Passpoint R2 implementa la registrazione online (OSU), un metodo standard per il provisioning di nuovi profili Passpoint. Android 10 e versioni successive supportano il provisioning dei profili EAP-TTLS utilizzando il protocollo SOAP-XML tramite OSU ESS aperto.
Le funzionalità Passpoint R2 supportate richiedono solo il codice di riferimento AOSP (non è richiesto alcun supporto aggiuntivo per driver o firmware). Il codice di riferimento AOSP include anche un'implementazione predefinita della UI Passpoint R2 nell'app Impostazioni.
Quando Android rileva un punto di accesso Passpoint R2, il framework Android:
- Visualizza un elenco dei fornitori di servizi pubblicizzati dal punto di accesso nel selettore Wi-Fi (oltre a visualizzare gli SSID).
- Chiede all'utente di toccare uno dei fornitori di servizi per configurare un profilo Passpoint.
- Guida l'utente nella procedura di configurazione del profilo Passpoint.
- Installa il profilo Passpoint risultante al termine dell'operazione.
- Si associa alla rete Passpoint utilizzando il profilo Passpoint appena sottoposto a provisioning.
Funzionalità Passpoint R3
Android 12 introduce le seguenti funzionalità Passpoint R3 che migliorano l'esperienza utente e consentono alle reti di rispettare le leggi locali:
- Termini e condizioni
L'accettazione dei termini e delle condizioni è richiesta per legge in alcune località e strutture per fornire l'accesso alla rete. Questa funzionalità consente alle implementazioni di rete di sostituire i captive portal non sicuri, che utilizzano reti aperte, con una rete Passpoint sicura. All'utente viene mostrata una notifica quando è necessario accettare i termini e le condizioni.
L'URL dei termini e condizioni deve indirizzare a un sito web sicuro che utilizza il protocollo HTTPS. Se l'URL rimanda a un sito web non sicuro, il framework si disconnette immediatamente e blocca la rete.
- URL informazioni sul luogo
Consente agli operatori di rete e alle sedi di fornire informazioni aggiuntive all'utente, come mappe, elenchi, promozioni e coupon. Una notifica viene mostrata all'utente quando la rete è connessa.
L'URL delle informazioni sul luogo deve rimandare a un sito web sicuro che utilizza il protocollo HTTPS. Se l'URL rimanda a un sito web non sicuro, il framework lo ignora e non mostra una notifica.
Altre funzionalità di Passpoint
Android 11 introduce le seguenti funzionalità Passpoint che migliorano l'esperienza utente, il consumo energetico e la flessibilità di implementazione.
- Applicazione forzata della data di scadenza e notifica
- L'applicazione delle date di scadenza ai profili consente al framework di evitare la connessione automatica a punti di accesso con credenziali scadute, che non andranno a buon fine. In questo modo si evita l'utilizzo del tempo di trasmissione e si risparmiano batteria e larghezza di banda del backend. Il framework mostra una notifica all'utente quando una rete corrispondente al suo profilo è nel raggio d'azione e il profilo è scaduto.
- Più profili con lo stesso FQDN
- Gli operatori che implementano reti Passpoint e utilizzano più ID di rete mobile pubblica (PLMN) possono eseguire il provisioning di più profili Passpoint con lo stesso FQDN, uno per ogni ID PLMN, che viene abbinato automaticamente alla scheda SIM installata e utilizzato per connettere la rete.
Android 12 introduce le seguenti funzionalità Passpoint che migliorano l'esperienza utente, il consumo energetico e la flessibilità di implementazione:
- Prefisso dell'identità decorato
- Quando l'autenticazione viene eseguita su reti con un prefisso decorato, il prefisso dell'identità decorata consente agli operatori di rete di aggiornare l'identificatore di accesso alla rete (NAI) per eseguire il routing esplicito tramite più proxy all'interno di una rete AAA (vedi RFC 7542). Android 12 implementa questa funzionalità in conformità alla specifica WBA per le estensioni PPS-MO.
- Gestione dell'imminente deautenticazione
- Consente agli operatori di rete di segnalare a un dispositivo che il servizio non è disponibile per le credenziali utilizzate per l'autenticazione alla rete per un determinato periodo di tempo (specificato tramite un ritardo di timeout). Dopo aver ricevuto questo segnale, i dispositivi non tenteranno di riconnettersi alla rete con le stesse credenziali fino a quando non sarà trascorso il ritardo di timeout. Al contrario, i dispositivi che non supportano questa funzionalità potrebbero tentare ripetutamente di riconnettersi alla rete mentre il servizio non è disponibile.
Esempi di profili XML OMA-DM PerProviderSubscription-MO
Profilo con credenziali nome utente/password (EAP-TTLS)
L'esempio seguente mostra un profilo per un'emittente con:
- Nome descrittivo della rete impostato su
Example Network
- FQDN impostato su
hotspot.example.net
- OI del consorzio di roaming (per il roaming)
- Credenziali con nome utente
user
, passwordpassword
codificata con Base64 e realm impostato suexample.net
- Metodo EAP impostato su
21
(EAP-TTLS) - Metodo interno di fase 2 impostato su
MS-CHAP-V2
- Nomi di dominio AAA alternativi impostati su
trusted.com
etrusted.net
<MgmtTree xmlns="syncml:dmddf1.2">
<VerDTD>1.2</VerDTD>
<Node>
<NodeName>PerProviderSubscription</NodeName>
<RTProperties>
<Type>
<DDFName>urn:wfa:mo:hotspot2dot0-perprovidersubscription:1.0</DDFName>
</Type>
</RTProperties>
<Node>
<NodeName>i001</NodeName>
<Node>
<NodeName>HomeSP</NodeName>
<Node>
<NodeName>FriendlyName</NodeName>
<Value>Example Network</Value>
</Node>
<Node>
<NodeName>FQDN</NodeName>
<Value>hotspot.example.net</Value>
</Node>
<Node>
<NodeName>RoamingConsortiumOI</NodeName>
<Value>112233,445566</Value>
</Node>
</Node>
<Node>
<NodeName>Credential</NodeName>
<Node>
<NodeName>Realm</NodeName>
<Value>example.net</Value>
</Node>
<Node>
<NodeName>UsernamePassword</NodeName>
<Node>
<NodeName>Username</NodeName>
<Value>user</Value>
</Node>
<Node>
<NodeName>Password</NodeName>
<Value>cGFzc3dvcmQ=</Value>
</Node>
<Node>
<NodeName>EAPMethod</NodeName>
<Node>
<NodeName>EAPType</NodeName>
<Value>21</Value>
</Node>
<Node>
<NodeName>InnerMethod</NodeName>
<Value>MS-CHAP-V2</Value>
</Node>
</Node>
</Node>
</Node>
<Node>
<NodeName>Extension</NodeName>
<Node>
<NodeName>Android</NodeName>
<Node>
<NodeName>AAAServerTrustedNames</NodeName>
<Node>
<NodeName>FQDN</NodeName>
<Value>trusted.com;trusted.net</Value>
</Node>
</Node>
</Node>
</Node>
</Node>
</Node>
</MgmtTree>
Profilo con credenziali di certificato digitale (EAP-TLS)
L'esempio seguente mostra un profilo per un'emittente con:
- Nome descrittivo della rete impostato su
GlobalRoaming
- FQDN impostato su
globalroaming.net
- OIs del consorzio di roaming (per il roaming)
- Realm impostato su
users.globalroaming.net
- Credenziale con un certificato digitale con l'impronta specificata
<MgmtTree xmlns="syncml:dmddf1.2">
<VerDTD>1.2</VerDTD>
<Node>
<NodeName>PerProviderSubscription</NodeName>
<RTProperties>
<Type>
<DDFName>urn:wfa:mo:hotspot2dot0-perprovidersubscription:1.0</DDFName>
</Type>
</RTProperties>
<Node>
<NodeName>i001</NodeName>
<Node>
<NodeName>HomeSP</NodeName>
<Node>
<NodeName>FriendlyName</NodeName>
<Value>GlobalRoaming</Value>
</Node>
<Node>
<NodeName>FQDN</NodeName>
<Value>globalroaming.net</Value>
</Node>
<Node>
<NodeName>RoamingConsortiumOI</NodeName>
<Value>FFEEDDCC0,FFEEDDCC1,009999,008888</Value>
</Node>
</Node>
<Node>
<NodeName>Credential</NodeName>
<Node>
<NodeName>Realm</NodeName>
<Value>users.globalroaming.net</Value>
</Node>
<Node>
<NodeName>DigitalCertificate</NodeName>
<Node>
<NodeName>CertificateType</NodeName>
<Value>x509v3</Value>
</Node>
<Node>
<NodeName>CertSHA256Fingerprint</NodeName>
<Value>0ef08a3d2118700474ca51fa25dc5e6d3d63d779aaad8238b608a853761da533</Value>
</Node>
</Node>
</Node>
</Node>
</Node>
</MgmtTree>
Profilo con una credenziale SIM (EAP-AKA)
L'esempio seguente mostra un profilo per un'emittente con:
- Nome descrittivo della rete impostato su
Purple Passpoint
- FQDN impostato su
wlan.mnc888.mcc999.3gppnetwork.org
- Credenziale SIM con ID PLMN
999888
- Metodo EAP impostato su
23
(EAP-AKA)
<MgmtTree xmlns="syncml:dmddf1.2">
<VerDTD>1.2</VerDTD>
<Node>
<NodeName>PerProviderSubscription</NodeName>
<RTProperties>
<Type>
<DDFName>urn:wfa:mo:hotspot2dot0-perprovidersubscription:1.0</DDFName>
</Type>
</RTProperties>
<Node>
<NodeName>i001</NodeName>
<Node>
<NodeName>HomeSP</NodeName>
<Node>
<NodeName>FriendlyName</NodeName>
<Value>Purple Passpoint</Value>
</Node>
<Node>
<NodeName>FQDN</NodeName>
<Value>purplewifi.com</Value>
</Node>
</Node>
<Node>
<NodeName>Credential</NodeName>
<Node>
<NodeName>Realm</NodeName>
<Value>wlan.mnc888.mcc999.3gppnetwork.org</Value>
</Node>
<Node>
<NodeName>SIM</NodeName>
<Node>
<NodeName>IMSI</NodeName>
<Value>999888*</Value>
</Node>
<Node>
<NodeName>EAPType</NodeName>
<Value>23</Value>
</Node>
</Node>
</Node>
</Node>
</Node>
</MgmtTree>
Avviso di autenticazione
I dispositivi con Android 8.x o Android 9 con un profilo Passpoint R1 EAP-SIM, EAP-AKA o EAP-AKA' non si connetteranno automaticamente alla rete Passpoint. Questo problema interessa utenti, operatori e servizi riducendo l'offload Wi-Fi.
Segmento | Impatto | Dimensioni dell'impatto |
---|---|---|
Operatori e fornitori di servizi Passpoint | Aumento del carico sulla rete mobile. | Qualsiasi operatore che utilizza Passpoint R1. |
Utenti | Opportunità mancata di connettersi automaticamente ai punti di accesso (AP) Wi-Fi dell'operatore, con conseguenti costi dei dati più elevati. | Qualsiasi utente con un dispositivo che funziona su una rete operatore che supporta Passpoint R1. |
Causa dell'errore
Passpoint specifica un meccanismo per abbinare un fornitore di servizi (ANQP) pubblicizzato a un profilo installato sul dispositivo. Le seguenti regole di corrispondenza per EAP-SIM, EAP-AKA ed EAP-AKA' sono un insieme parziale di regole incentrate sugli errori EAP-SIM/AKA/AKA':
If the FQDN (Fully Qualified Domain Name) matches
then the service is a Home Service Provider.
Else: If the PLMN ID (3GPP Network) matches
then the service is a Roaming Service Provider.
Il secondo criterio è stato modificato in Android 8.0:
Else: If the PLMN ID (3GPP Network) matches AND the NAI Realm matches
then the service is a Roaming Service Provider.
Con questa modifica, il sistema non ha rilevato corrispondenze per i fornitori di servizi che funzionavano in precedenza, pertanto i dispositivi Passpoint non si sono connessi automaticamente.
Soluzioni alternative
Per risolvere il problema dei criteri di corrispondenza modificati, gli operatori e i fornitori di servizi devono aggiungere il dominio dell'identificatore di accesso alla rete (NAI) alle informazioni pubblicate dal punto di accesso Passpoint.
La soluzione consigliata consiste nell'implementazione di una soluzione alternativa lato rete da parte dei fornitori di servizi di rete per ridurre al minimo i tempi di implementazione. Una soluzione alternativa lato dispositivo dipende dal fatto che gli OEM prelevino un elenco di modifiche (CL) da AOSP e poi aggiornino i dispositivi sul campo.
Correzione di rete per operatori e fornitori di servizi Passpoint
La soluzione alternativa lato rete richiede la riconfigurazione della rete per aggiungere l'elemento ANQP del realm NAI come specificato di seguito. Le specifiche Passpoint non richiedono l'elemento ANQP del realm NAI, ma l'aggiunta di questa proprietà è conforme alle specifiche Passpoint, pertanto le implementazioni client conformi alle specifiche non devono interrompersi.
- Aggiungi l'elemento ANQP del realm NAI.
- Imposta il campo secondario del realm NAI in modo che corrisponda a
Realm
del profilo installato sul dispositivo. Imposta le seguenti informazioni in base a ogni tipo di EAP:
- EAP-TTLS: imposta
EAPMethod(21)
e i tipi di autenticazione interna supportati (PAP
,CHAP
,MS-CHAP
oMS-CHAP-V2
) - EAP-TLS: imposta
EAPMethod(13)
- EAP-SIM: imposta
EAPMethod(18)
- EAP-AKA: imposta
EAPMethod(23)
- EAP-AKA': imposta
EAPMethod(50)
- EAP-TTLS: imposta
Correzione del dispositivo/AOSP per gli OEM
Per implementare una soluzione alternativa lato dispositivo, gli OEM devono scegliere la patch CL aosp/718508. Questa patch può essere applicata alle seguenti release (non si applica ad Android 10 o versioni successive):
- Android 9
- Android 8.x
Quando la patch viene prelevata, gli OEM devono aggiornare i dispositivi sul campo.