Passpoint (hotspot 2.0)

Passpoint è un protocollo Wi-Fi Alliance (WFA) che consente ai dispositivi mobili di rilevare e autenticarsi negli 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 dell'HAL. Per le release precedenti ad Android 13, le interfacce e le partizioni dei fornitori usano l'HIDL. I file HIDL si trovano in hardware/interfaces/supplicant/1.x e i file AIDL sono in hardware/interfaces/supplicant/aidl. Il supplicante fornisce il supporto per lo standard 802.11u, in particolare per funzionalità di rilevamento e selezione della rete come GAS (Generic Pubblicità Service Service) e Access Network Query Protocol (ANQP).

Implementazione

Android 11 o versioni successive

Per supportare Passpoint sui dispositivi con Android 11 o versioni successive, i produttori devono fornire il supporto 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 l'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 di funzionalità per Passpoint. In device.mk nel percorso 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, utilizza l'insieme di test delle unità e di integrazione fornito nella Test Suite di Comms Android (ACTS).

Test delle unità

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

Test di integrazione (ACTS)

La suite di test ACTS Passpoint, situata in tools/test/connectivity/acts_tests/tests/google/wifi/WifiPasspointTest.py, implementa un insieme di test funzionali.

Provisioning Passpoint R1

Android supporta Passpoint R1 sin da Android 6.0, consentendo il provisioning delle credenziali Passpoint R1 (release 1) tramite il download basato sul web di un file speciale contenente 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é può contenere password in chiaro o dati di chiave privata. I contenuti sono costituiti da testo MIME multiparte con wrapping, rappresentato in UTF-8 e codificato con la codifica 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 su application/x-wifi-config.
  • Content-Transfer-Encoding deve essere impostato su base64.
  • Content-Disposition non deve essere impostato.

Il metodo HTTP utilizzato per recuperare il file deve essere GET. Ogni volta che una richiesta 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 offrire o meno funzionalità simili.

Composizione dei file

I contenuti codificati in Base64 devono essere costituiti da contenuti multiparte MIME con Content-Type pari a multipart/mixed. Le seguenti parti compongono le singole parti dei contenuti multiparte.

Pezzo Tipo di contenuto (meno virgolette) Obbligatorie Description
Profilo application/x-passpoint-profile Sempre Payload in formato OMA-DM SyncML contenente l'oggetto MO in formato Passpoint R1 PerProviderSubscription per HomeSP e Credential.
Certificato di attendibilità 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 container PKCS 12, la chiave privata e i certificati devono essere tutti in testo in chiaro senza password.

La sezione Profilo deve essere trasferita come testo XML con codifica UTF-8 e codifica Base64 che specifica parti dei sottoalberi 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 sottonodo immediato deve essere PerProviderSubscription. Un file XML di esempio viene visualizzato in Esempio di profilo XML OMA-DM.

In HomeSP vengono utilizzati i seguenti nodi secondari:

  • FriendlyName: deve essere impostato; utilizzato come testo visualizzato
  • FQDN: campo obbligatorio
  • RoamingConsortiumOI

In Credential vengono utilizzati i seguenti nodi secondari:

  • Realm: deve essere una stringa non vuota
  • UsernamePassword: obbligatorio per EAP-TTLS con i seguenti nodi impostati:

    • Username: stringa che contiene il nome utente
    • Password: stringa con codifica Base64 (impostata su cGFzc3dvcmQ=, la stringa con codifica Base64 per "password", nell'esempio riportato di seguito)
    • EAPMethod/EAPType: deve essere impostato su 21
    • EAPMethod/InnerMethod: il valore deve essere impostato su PAP, CHAP, MS-CHAP o MS-CHAP-V2
  • DigitalCertificate: obbligatorio per EAP-TLS. Devono essere impostati i seguenti nodi:

    • CertificateType impostato alle ore x509v3
    • 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 campo EAPType deve essere impostato sul tipo EAP appropriato e IMSI 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 completa di uguaglianza o da 5 o 6 cifre decimali seguite da un asterisco (*) per ridurre la corrispondenza dell'IMSI solo per il Centro clienti/MNC. Ad esempio, la stringa IMSI 123456* corrisponde a qualsiasi scheda SIM con il Centro clienti come 123 e MNC come 456.

Android 11 introduce funzionalità che rendono più flessibile il provisioning di Passpoint R1.

Nome di dominio distinto 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 nomi di dominio completo delimitato da punti e virgola in un nuovo nodo nel sottoalbero Extension. Questo è un nodo facoltativo e i dispositivi con Android 10 o versioni precedenti ignorano questo nodo.

  • Android: sottoalbero dell'estensione Android

    • AAAServerTrustedNames: obbligatorio per i nomi attendibili dei 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.
Consenti l'installazione di profili senza un certificato CA radice
Il certificato CA radice associato al profilo viene utilizzato per l'autenticazione del server AAA. Gli amministratori di rete 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 con i certificati CA radice pubblici installati nell'archivio di attendibilità.

Provisioning Passpoint R2

Android 10 ha introdotto il supporto delle funzionalità Passpoint R2. Passpoint R2 implementa la registrazione online (OSU), un metodo standard per il provisioning di nuovi profili Passpoint. Android 10 e versioni successive supporta il provisioning di profili EAP-TTLS tramite 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 di driver o firmware). 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:

  1. Mostra un elenco dei fornitori di servizi pubblicizzati dall'AP nel selettore Wi-Fi (oltre a visualizzare gli SSID).
  2. Chiede all'utente di toccare uno dei fornitori di servizi per configurare un profilo Passpoint.
  3. Guida l'utente nel flusso di configurazione del profilo Passpoint.
  4. Installa il profilo Passpoint risultante al completamento dell'operazione.
  5. Associa alla rete Passpoint utilizzando il profilo Passpoint appena di cui è stato 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 condizioni è richiesta per legge in alcuni luoghi e canali 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. Viene mostrata una notifica all'utente quando è necessario accettare termini e condizioni.

L'URL dei Termini e condizioni deve indirizzare a un sito web sicuro utilizzando HTTPS. Se l'URL rimanda a un sito web non sicuro, il framework si disconnette immediatamente e blocca la rete.

URL informazioni sulla sede

Consente agli operatori di rete e alle sedi di fornire ulteriori informazioni all'utente, come mappe dei luoghi, directory, promozioni e coupon. Quando la rete è connessa, viene mostrata una notifica all'utente.

L'URL delle informazioni sul luogo deve indirizzare a un sito web sicuro tramite HTTPS. Se l'URL rimanda a un sito web non sicuro, il framework ignora l'URL e non mostra una notifica.

Altre funzionalità di Passpoint

Android 11 introduce le seguenti funzionalità Passpoint che migliorano l'esperienza utente, l'utilizzo dell'energia e la flessibilità del deployment.

Applicazione e notifica della data di scadenza
Applicare le 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 profilo è nell'intervallo e il profilo è scaduto.
Più profili con nome di dominio completo identico
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 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à in base alla specifica WBA per le estensioni PPS-MO.
Gestione imminente della deautenticazione
Consente agli operatori di rete di segnalare a un dispositivo che il servizio non è disponibile per la credenziale utilizzata per l'autenticazione sulla 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. Al contrario, i dispositivi che non supportano questa funzionalità potrebbero tentare di riconnettersi ripetutamente alla rete mentre il servizio non è disponibile.

Esempi di profili XML OMA-DM PerProviderSubscription-MO

Profilo con 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)
  • Credenziale con nome utente user, password password codificata con Base64 e area di autenticazione impostata su example.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 e trusted.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 compatibile con la rete impostato su GlobalRoaming
  • FQDN impostato su globalroaming.net
  • OI del Roaming Consortium (per il roaming)
  • Area di autenticazione impostata su users.globalroaming.net
  • Credenziale con un certificato digitale con la fingerprint 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 credenziale SIM (EAP-AKA)

L'esempio seguente mostra un profilo per una rete con:

  • Nome compatibile con la 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>

Avvertenza per l'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 riguarda utenti, operatori e servizi riducendo l'offload Wi-Fi.

Segmento Impatto Dimensione dell'impatto
Operatori e fornitori di servizi Passpoint Carico elevato sulla rete mobile. Qualsiasi operatore che utilizza Passpoint R1.
Users (Utenti) Hai perso l'opportunità di connetterti automaticamente ai punti di accesso Wi-Fi dell'operatore (AP), con conseguente aumento dei costi per l'uso dei dati. Qualsiasi utente con un dispositivo che funziona sulla rete di un 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 precedentemente funzionanti, quindi i dispositivi Passpoint non si collegavano automaticamente.

Soluzioni alternative

Per aggirare il problema dei criteri di corrispondenza modificati, gli operatori e i fornitori di servizi devono aggiungere l'area di autenticazione Network Access Identifier (NAI) alle informazioni pubblicate dal punto di accesso Passpoint.

La soluzione consigliata è che i provider di servizi di rete implementino una soluzione alternativa lato rete per velocizzare il deployment. Una soluzione lato dispositivo dipende dal fatto che gli OEM recuperino un elenco 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 di 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.

  1. Aggiungi l'elemento ANQP dell'area di autenticazione NAI.
  2. Imposta il campo secondario dell'area di autenticazione NAI in modo che corrisponda al valore Realm del profilo installato sul dispositivo.
  3. Imposta le seguenti informazioni in base a ciascun tipo di EAP:

    • EAP-TTLS: imposta EAPMethod(21) e tipi di autenticazione interni supportati (PAP, CHAP, MS-CHAP o MS-CHAP-V2)
    • EAP-TLS: imposta EAPMethod(13)
    • EAP-SIM: imposta EAPMethod(18)
    • EAP-AKA: imposta EAPMethod(23)
    • EAP-AKA': Imposta EAPMethod(50)

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 in aggiunta alle seguenti release (non si applica ad Android 10 o versioni successive):

  • Android 9
  • Android 8.x

Una volta ottenuta la patch, gli OEM devono aggiornare i dispositivi sul campo.