Passpoint è un protocollo Wi-Fi Alliance (WFA) che consente ai dispositivi mobili di scoprire e autenticarsi agli 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 utilizzano HIDL.
I file HIDL si trovano in hardware/interfaces/supplicant/1.x e i file AIDL in hardware/interfaces/supplicant/aidl.
Il supplicant fornisce supporto per lo standard 802.11u, in particolare per le funzionalità di rilevamento e selezione della rete, come Generic Advertisement Service (GAS) e Access Network Query Protocol (ANQP).
Implementazione
L'implementazione di Passpoint varia a seconda della versione di Android.
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 che per HAL e firmware:
- Framework: attiva Passpoint (richiede un flag funzionalità)
- Firmware: supporto per 802.11u
Per supportare Passpoint, implementa Wi-Fi HAL e attiva il flag funzionalità per Passpoint. In device.mk che si trova in device/<oem>/<device>, modifica la
PRODUCT_COPY_FILES variabile di ambiente per 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 unitari del pacchetto Passpoint:
Test del servizio:
atest com.android.server.wifi.hotspot2Test del gestore:
atest android.net.wifi.hotspot2Provisioning di Passpoint R1
Android supporta Passpoint R1 da Android 6.0, consentendo il provisioning delle credenziali Passpoint R1 (release 1) tramite il download basato sul web di un file speciale che contiene informazioni sul profilo e sulle 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 di Passpoint deve essere ospitato su un server web e deve essere protetto con TLS (HTTPS) perché potrebbe contenere dati di password o chiavi private in dati in chiaro. I contenuti sono costituiti da testo MIME multipart incapsulato rappresentato in UTF-8 e codificato in base64 secondo la 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-Typedeve essere impostato suapplication/x-wifi-config.Content-Transfer-Encodingdeve essere impostato subase64.Content-Dispositionnon 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, ad esempio 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
I contenuti codificati in Base64 devono essere costituiti da contenuti MIME multipart con un Content-Type di multipart/mixed. Le seguenti parti costituiscono le singole parti dei contenuti multipart.
| Parte | Content-Type (senza virgolette) | Obbligatorio | Descrizione |
|---|---|---|---|
| Profilo |
application/x-passpoint-profile
|
Sempre | Payload in formato OMA-DM SyncML contenente l'oggetto di gestione in formato PerProviderSubscription di Passpoint R1 per HomeSP e Credential. |
| Certificato Trust |
application/x-x509-ca-cert
|
Obbligatorio per EAP-TLS ed EAP-TTLS | Un singolo payload di certificato con codifica Base64 X.509v3. |
| 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 container PKCS 12, la chiave privata e i certificati devono essere tutti in dati in chiaro senza password. |
La sezione Profilo deve essere trasferita come testo XML con codifica UTF-8 e Base64 che specifica le parti dei sottoalberi HomeSP e Credential nella sezione 9.1 della specifica tecnica di Passpoint R2 versione 1.0.0.
Il nodo di primo livello deve essere MgmtTree e il sotto-nodo immediato deve essere PerProviderSubscription. Un file XML di esempio è riportato in
Esempio di XML OMA-DM del profilo.
I seguenti nodi del sottoalbero vengono utilizzati in HomeSP:
FriendlyName: deve essere impostato; utilizzato come testo visualizzatoFQDN: obbligatorioRoamingConsortiumOI
I seguenti nodi del sottoalbero 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 con codifica Base64 (nell'esempio seguente è impostata sucGFzc3dvcmQ=, la stringa con codifica Base64 per "password")EAPMethod/EAPType: deve essere impostato su21EAPMethod/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:CertificateTypeimpostato sux509v3CertSHA256Fingerprintimpostato 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 campoEAPTypedeve essere impostato sul tipo EAP appropriato eIMSIdeve 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 rilassare la corrispondenza IMSI solo a MCC/MNC. Ad esempio, la stringa IMSI123456*corrisponde a qualsiasi scheda SIM con MCC come123e MNC come456.
Android 11 introduce funzionalità che rendono più flessibile il provisioning di Passpoint R1.
- Nome di dominio di autenticazione, autorizzazione e accounting (AAA) separato
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 punti e virgola in un nuovo nodo nel sottoalbero
Extension. Questo è un nodo facoltativo e i dispositivi con Android versione 10 o precedenti lo ignorano.Android: sottoalbero di estensione AndroidAAAServerTrustedNames: obbligatorio per i nomi attendibili del server AAA con i seguenti nodi impostati:FQDN: stringa contenente 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 privata autofirmata 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 affidarsi alle CA radice attendibili pubblicamente 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 CA radice pubblici installati nell'archivio attendibilità.
Provisioning di 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 su OSU ESS aperto.
Le funzionalità di 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 dell'UI di 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 dall'AP 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 completamento.
- Si associa alla rete Passpoint utilizzando il profilo Passpoint appena sottoposto a provisioning.
Funzionalità di Passpoint R3
Android 12 introduce le seguenti funzionalità di 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 è legalmente obbligatoria in alcune località e sedi per fornire l'accesso alla rete. Questa funzionalità consente alle implementazioni di rete di sostituire i portali captive 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 delle condizioni deve rimandare a un sito web sicuro che utilizza HTTPS. Se l'URL rimanda a un sito web non sicuro, il framework si disconnette immediatamente e blocca la rete.
- URL delle informazioni sulla sede
Consente agli operatori di rete e alle sedi di fornire agli utenti informazioni aggiuntive, come mappe delle sedi, directory, promozioni e coupon. All'utente viene mostrata una notifica quando la rete è connessa.
L'URL delle informazioni sulla sede deve rimandare a un sito web sicuro che utilizza 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à di Passpoint che migliorano l'esperienza utente, il consumo energetico e la flessibilità di deployment.
- Applicazione e notifica della data di scadenza
- L'applicazione delle date di scadenza sui profili consente al framework di evitare la connessione automatica ai punti di accesso con credenziali scadute, che sicuramente non andranno a buon fine. In questo modo si evita l'utilizzo del tempo di trasmissione e si risparmiano batteria e larghezza di banda di backend. Il framework mostra una notifica all'utente quando una rete che corrisponde al suo profilo è nel raggio d'azione e il profilo è scaduto.
- Più profili con lo stesso FQDN
- Gli operatori che eseguono il deployment di reti Passpoint e utilizzano più ID PLMN (Public Land Mobile Network) 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à di Passpoint che migliorano l'esperienza utente, il consumo energetico e la flessibilità di deployment:
- Prefisso dell'identità decorato
- Quando si esegue l'autenticazione alle reti con una decorazione del prefisso, il prefisso dell'identità decorato 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 base alla specifica WBA per le estensioni PPS-MO.
- Gestione della deautenticazione imminente
- Consente agli operatori di rete di segnalare a un dispositivo che il servizio non è disponibile per la credenziale utilizzata 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 la stessa credenziale fino alla scadenza del 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 una credenziale di nome utente e password (EAP-TTLS)
L'esempio seguente mostra un profilo per una rete con:
- Nome descrittivo della rete impostato su
Example Network - FQDN impostato su
hotspot.example.net - OI del consorzio di roaming (per il roaming)
- Credenziale con nome utente
user, passwordpasswordcodificata 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.cometrusted.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 di certificato digitale (EAP-TLS)
L'esempio seguente mostra un profilo per una rete con:
- Nome descrittivo della rete impostato su
GlobalRoaming - FQDN impostato su
globalroaming.net - OI 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 una rete con:
- Nome descrittivo della rete impostato su
Purple Passpoint - FQDN impostato su
wlan.mnc888.mcc999.3gppnetwork.org - Credenziale SIM con ID PLMN di
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 influisce su 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 connessione automatica ai punti di accesso Wi-Fi dell'operatore (AP), con conseguenti costi dei dati più elevati. | Qualsiasi utente con un dispositivo che funziona su una rete di un operatore che supporta Passpoint R1. |
Motivo dell'errore
Passpoint specifica un meccanismo per abbinare un fornitore di servizi pubblicizzato (ANQP) 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 alcuna corrispondenza per i fornitori di servizi che funzionavano in precedenza, quindi i dispositivi Passpoint non si sono connessi automaticamente.
Soluzioni
Per risolvere il problema dei criteri di corrispondenza modificati, gli operatori e i fornitori di servizi devono aggiungere il realm dell'identificatore di accesso alla rete (NAI) 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 il tempo di deployment. Una soluzione alternativa lato dispositivo dipende dal fatto che gli OEM recuperino un elenco di modifiche (CL) da AOSP e poi aggiornino i dispositivi sul campo.
Correzione della 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 segue. Le specifiche di Passpoint non richiedono l'elemento ANQP del realm NAI, ma l'aggiunta di questa proprietà è conforme alle specifiche di Passpoint, quindi le implementazioni client conformi alle specifiche non dovrebbero interrompersi.
- Aggiungi l'elemento ANQP del realm NAI.
- Imposta il sotto-campo del realm NAI in modo che corrisponda al
Realmdel profilo installato sul dispositivo. - Imposta le seguenti informazioni in base a ogni tipo EAP:
- EAP-TTLS: imposta
EAPMethod(21)e i tipi di autenticazione interna supportati (PAP,CHAP,MS-CHAPoMS-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 recuperata, gli OEM devono aggiornare i dispositivi sul campo.