Passpoint è un protocollo di Wi-Fi Alliance (WFA) che consente ai dispositivi mobili di rilevare e autenticarsi negli hotspot Wi-Fi che forniscono 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 del fornitore usano il protocollo 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 annunci generici (GAS) e il protocollo ANQP (Access Network Query Protocol).
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 devono fornire il supporto sia per il framework sia per HAL/firmware:
- Framework: abilita Passpoint (richiede un flag di 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
, situato in device/<oem>/<device>
, modifica la variabile di ambiente PRODUCT_COPY_FILES
in modo da includere il supporto della 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 di servizio:
atest com.android.server.wifi.hotspot2
Test del gestore:
atest android.net.wifi.hotspot2
Provisioning Passpoint R1
Android supporta Passpoint R1 da Android 6.0, consentendo il provisioning delle credenziali Passpoint R1 (release 1) tramite il download basato su web di un file speciale contenente informazioni su profilo e 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 della chiave privata. I contenuti sono costituiti da testo MIME con wrapping multipart rappresentato in UTF-8 e codificato in base64 in base alla sezione 6.8 della RFC-2045.
I seguenti campi dell'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 comando GET HTTP 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 o meno fornire funzionalità simili.
Composizione del file
I contenuti codificati in Base64 devono essere costituiti da contenuti MIME con più parti con un valore Content-Type
di multipart/mixed
. Le seguenti parti costituiscono le singole parti dei contenuti suddivisi in più parti.
Parte | Tipo di contenuto (meno virgolette) | Obbligatorio | Descrizione |
---|---|---|---|
Profilo |
application/x-passpoint-profile
|
Sempre | Payload in formato OMA-DM SyncML contenente l'elemento MO in formato Passpoint R1PerProviderSubscription per HomeSP
e Credential . |
Certificato di attendibilità |
application/x-x509-ca-cert
|
Obbligatorio per EAP-TLS e 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 codificato in base64 e UTF-8 che specifica parti dei sottoalberi HomeSP
e Credential
nella sezione 9.1 della versione 1.0.0 delle specifiche tecniche Passpoint R2.
Il nodo di primo livello deve essere MgmtTree
e il sottonodo immediato deve essere
PerProviderSubscription
. Un file XML di esempio viene visualizzato in
XML OMA-DM del profilo di esempio.
In HomeSP
vengono utilizzati i seguenti nodi del sottoalbero:
FriendlyName
: deve essere impostato; utilizzato come testo visualizzatoFQDN
: obbligatorioRoamingConsortiumOI
In Credential
vengono utilizzati i seguenti nodi del sottoalbero:
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 di seguito)EAPMethod/EAPType
: deve essere impostato su21
EAPMethod/InnerMethod
: il valore deve essere impostato suPAP
,CHAP
,MS-CHAP
oMS-CHAP-V2
DigitalCertificate
: obbligatorio per EAP-TLS. È necessario impostare i seguenti nodi:CertificateType
impostato alle orex509v3
CertSHA256Fingerprint
impostato sul digest SHA-256 corretto del certificato client 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 composta interamente da cifre decimali per forzare la corrispondenza di piena uguaglianza o da 5 o 6 cifre decimali seguite da un asterisco (*) per allentare la corrispondenza IMSI solo a MCC/MNC. Ad esempio, la stringa IMSI 123456* corrisponde a qualsiasi scheda SIM con MCC pari a 123 e MNC pari a 456.
Android 11 introduce funzionalità che rendono più flessibile il provisioning di Passpoint R1.
- Nome di dominio separato per autenticazione, autorizzazione e fatturazione (AAA)
Gli amministratori di reti Passpoint che richiedono un nome di dominio AAA specificato indipendente dal nome di dominio completo (FQDN) pubblicizzato dalla rete tramite il protocollo ANQP (Access Network Query Protocol) possono specificare un elenco di FQDN delimitati da punto e virgola in un nuovo nodo sotto il sottoalbero
Extension
. Questo è un nodo facoltativo e i dispositivi con Android 10 o versioni precedenti lo ignorano.
Android
: sottoalbero dell'estensione AndroidAAAServerTrustedNames
: obbligatorio per i nomi attendibili del server AAA con i seguenti nodi impostati:FQDN
: stringa che contiene i nomi attendibili del server AAA. Utilizza il punto 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 certificati possono eseguire il provisioning dei profili con una CA privata autofirmata per l'autenticazione AAA.
- Consentire 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 di Passpoint che vogliono affidarsi a CA radice pubbliche attendibili 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 rispetto ai certificati pubblici delle CA radice installati nell'archivio attendibilità.
Provisioning Passpoint R2
Android 10 ha introdotto il supporto per le funzionalità Passpoint R2. Passpoint R2 implementa la registrazione online (OSU), un metodo standard per eseguire il provisioning di nuovi profili Passpoint. Android 10 e versioni successive supportano il provisioning dei profili EAP-TTLS utilizzando il protocollo SOAP-XML su OSU ESS aperto.
Le funzionalità Passpoint R2 supportate richiedono solo il codice di riferimento AOSP (non è richiesto il supporto di driver o firmware aggiuntivi). Il codice di riferimento AOSP include anche un'implementazione predefinita dell'interfaccia utente Passpoint R2 nell'app Impostazioni.
Quando Android rileva un punto di accesso Passpoint R2, il framework Android:
- Mostra un elenco dei fornitori di servizi pubblicizzati dall'AP nel selettore Wi-Fi (oltre a mostrare gli SSID).
- Chiede all'utente di toccare uno dei fornitori di servizi per configurare un profilo Passpoint.
- Guida l'utente attraverso il flusso di configurazione del profilo Passpoint.
- Installa il profilo Passpoint risultante al termine dell'operazione.
- Si associa alla rete Passpoint utilizzando il profilo Passpoint appena eseguito il provisioning.
Funzionalità di 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 è obbligatoria per legge in alcune località e luoghi per fornire l'accesso alla rete. Questa funzionalità consente ai deployment 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 puntare a un sito web sicuro che utilizzi 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 a emittenti, operatori e luoghi di fornire all'utente informazioni aggiuntive, come mappe dei luoghi, directory, promozioni e coupon. Quando la rete è connessa, viene visualizzata una notifica all'utente.
L'URL delle informazioni sulla sede deve puntare a un sito web sicuro che utilizzi HTTPS. Se l'URL rimanda a un sito web non sicuro, il framework ignora l'URL e non mostra una notifica.
Altre funzionalità Passpoint
Android 11 introduce le seguenti funzionalità Passpoint che migliorano l'esperienza utente, l'utilizzo dell'energia e la flessibilità di implementazione.
- Applicazione e notifica della data di scadenza
- L'applicazione di date di scadenza ai profili consente al framework di evitare la connessione automatica ai punti di accesso con credenziali scadute, che rischiano di non riuscire. In questo modo si evita l'utilizzo del tempo di trasmissione e si risparmia 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 FQDN identici
- Gli operatori che distribuiscono reti Passpoint e utilizzano più ID di reti mobile pubbliche terrestri (PLMN) possono eseguire il provisioning di più profili Passpoint con lo stesso FQDN, uno per ogni ID PLMN, che viene automaticamente abbinato alla scheda SIM installata e utilizzato per connettere la rete.
Android 12 introduce le seguenti funzionalità Passpoint che migliorano l'esperienza utente, l'utilizzo dell'energia e la flessibilità del deployment:
- Prefisso dell'identità decorato
- Durante l'autenticazione nelle reti con decorazione del prefisso, il prefisso di identità decorato consente agli operatori di rete di aggiornare l'identificatore di accesso alla rete (NAI) per eseguire il routing esplicito attraverso più proxy all'interno di una rete AAA (vedi RFC 7542). Android 12 implementa questa funzionalità secondo la specifica WBA per le estensioni PPS-MO.
- Gestione dell'imminente disconnessione
- 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 una determinata durata (specificata tramite un ritardo di timeout). Dopo aver ricevuto questo segnale, i dispositivi non tenteranno di riconnettersi alla rete con le stesse credenziali fino alla scadenza del ritardo di timeout. I dispositivi che non supportano questa funzionalità, invece, potrebbero tentare di riconnettersi ripetutamente alla rete mentre il servizio non è disponibile.
Esempi di profili XML OMA-DM PerProviderSubscription-MO
Profilo con una credenziale nome utente/password (EAP-TTLS)
L'esempio seguente mostra un profilo per una rete con:
- Nome compatibile con la rete impostato su
Example Network
- FQDN impostato su
hotspot.example.net
- OI del consorzio di roaming (per il roaming)
- L'autenticazione con nome utente
user
, passwordpassword
codificata in Base64 e ambito impostato suexample.net
- Metodo EAP impostato su
21
(EAP-TTLS) - Metodo interno della 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 una credenziale del certificato digitale (EAP-TLS)
L'esempio seguente mostra un profilo per una rete con:
- Nome visualizzato della rete impostato su
GlobalRoaming
- FQDN impostato su
globalroaming.net
- Operatori in roaming del Consorzio (per il roaming)
- Area di autenticazione impostata su
users.globalroaming.net
- L'autenticazione con un certificato digitale che ha 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 una rete con:
- Nome visualizzato della rete impostato su
Purple Passpoint
- FQDN impostato su
wlan.mnc888.mcc999.3gppnetwork.org
- Scheda 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>
Avvisa 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 connettono automaticamente alla rete Passpoint. Questo problema interessa utenti, operatori e servizi riducendo il trasferimento delle risorse dal 5G al Wi-Fi.
Segmento | Impatto | Dimensione 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 Wi-Fi dell'operatore (AP), con conseguente aumento dei costi del servizio dati. | Qualsiasi utente con un dispositivo che funziona su una rete dell'operatore che supporta Passpoint R1. |
Causa dell'errore
Il passpoint specifica un meccanismo per associare 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 realm NAI (Network Access Identifier) alle informazioni pubblicate dall'AP Passpoint.
La soluzione consigliata è che i fornitori di servizi di rete implementino una soluzione alternativa lato rete per ridurre al minimo i tempi di implementazione. Una soluzione alternativa sul lato del dispositivo dipende dal fatto che gli OEM recuperino 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 di area di autenticazione NAI, ma l'aggiunta di questa proprietà è conforme alle specifiche Passpoint, quindi le implementazioni dei client conformi alle specifiche non dovrebbero funzionare.
- Aggiungi l'elemento ANQP del realm NAI.
- Imposta il sottocampo del realm NAI in modo che corrisponda al
Realm
del profilo installato sul dispositivo. Imposta le seguenti informazioni in base a ciascun 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 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 rilevata, gli OEM devono aggiornare i dispositivi sul campo.