Punto di accesso (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.

Supporto del dispositivo

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 versioni precedenti ad Android 13, le interfacce e le partizioni del fornitore utilizzano HIDL. I file HIDL si trovano in hardware/interfaces/supplicant/1.x mentre i file AIDL si trovano in hardware/interfaces/supplicant/aidl . Il richiedente fornisce il supporto per lo standard 802.11u, in particolare le funzionalità di rilevamento e selezione della rete come il servizio pubblicitario generico (GAS) e il protocollo di query di accesso alla rete (ANQP).

Implementazione

Android 11 o versioni successive

Per supportare Passpoint sui dispositivi con Android 11 o versioni successive, i produttori dei dispositivi devono fornire il supporto firmware per 802.11u. Tutti gli altri requisiti per supportare 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 sia il supporto framework che HAL/firmware:

  • Framework: abilita Passpoint (richiede un flag di funzionalità)
  • Firmware: supporto per 802.11u

Per supportare Passpoint, implementare l'HAL Wi-Fi e abilitare il flag di funzionalità per Passpoint. In device.mk situato in device/<oem>/<device> , modificare la variabile di ambiente PRODUCT_COPY_FILES 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 supportare Passpoint sono inclusi in AOSP.

Validazione

Per convalidare l'implementazione della funzionalità Passpoint, utilizzare il set di unit test e test di integrazione forniti in Android Comms Test Suite (ACTS).

Test unitari

Eseguire i seguenti test unitari del pacchetto Passpoint.

Test di servizio:

atest com.android.server.wifi.hotspot2

Prove dirigenziali:

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 una serie di test funzionali.

Provisioning del passpoint R1

Android supporta Passpoint R1 a partire da Android 6.0, consentendo il provisioning delle credenziali Passpoint R1 (versione 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 il contenuto.

Le informazioni sul profilo contenute nel file vengono utilizzate per la corrispondenza con i dati recuperati dai punti di accesso abilitati Passpoint e le credenziali vengono applicate automaticamente per qualsiasi rete corrispondente.

L'implementazione di riferimento Android supporta EAP-TTLS, EAP-TLS, EAP-SIM, EAP-AKA e 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) poiché potrebbe contenere password in testo non crittografato o dati di chiave privata. Il contenuto è costituito da testo MIME multiparte racchiuso rappresentato in UTF-8 e codificato nella codifica base64 secondo RFC-2045 sezione 6.8.

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 impostata.

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 avviato toccando un elemento HTML come un pulsante (i reindirizzamenti automatici all'URL di download non sono supportati). Questo comportamento è specifico di Google Chrome; altri browser web potrebbero o meno fornire funzionalità simili.

Composizione dell'archivio

Il contenuto codificato Base64 deve essere costituito da contenuto multiparte MIME con un Content-Type multipart/mixed . Le seguenti parti costituiscono le singole parti del contenuto multiparte.

Parte Tipo di contenuto (meno virgolette) Necessario Descrizione
Profilo application/x-passpoint-profile Sempre Payload formattato OMA-DM SyncML contenente il MO formattato Passpoint R1 PerProviderSubscription per HomeSP e Credential .
Certificato di fiducia 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 PKCS #12 ASN.1 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 chiaro senza password.

La sezione Profilo deve essere trasferita come testo XML con codifica base64 e codifica UTF-8 che specifica parti delle sottostrutture HomeSP e Credential nella Specifica tecnica Passpoint R2 Versione 1.0.0, sezione 9.1.

Il nodo di livello superiore deve essere MgmtTree e il nodo secondario immediato deve essere PerProviderSubscription . Un file XML di esempio viene visualizzato nel profilo di esempio OMA-DM XML .

I seguenti nodi della sottostruttura vengono utilizzati in HomeSP :

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

In Credential vengono utilizzati i seguenti nodi della sottostruttura:

  • 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 seguente)
    • EAPMethod/EAPType : deve essere impostato su 21
    • EAPMethod/InnerMethod : deve essere impostato su uno tra PAP , CHAP , MS-CHAP o MS-CHAP-V2
  • DigitalCertificate : obbligatorio per EAP-TLS. È necessario impostare i seguenti nodi:

    • CertificateType impostato su x509v3
    • CertSHA256Fingerprint impostata sul corretto digest SHA-256 del certificato client nella sezione MIME della chiave EAP-TLS
  • SIM : richiesta per EAP-SIM, EAP-AKA e EAP-AKA'. Il campo EAPType deve essere impostato sul tipo EAP appropriato e IMSI deve corrispondere all'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 uguaglianza completa oppure da 5 o 6 cifre decimali seguite da un asterisco (*) per rilassare la corrispondenza IMSI solo con MCC/MNC. Ad esempio, la stringa IMSI 123456* corrisponde a qualsiasi scheda SIM con MCC come 123 e MNC come 456.

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

Nome di dominio separato di 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 l'Access Network Query Protocol (ANQP) possono specificare un elenco di FQDN delimitati da punto e virgola in un nuovo nodo nella sottostruttura Extension . Questo è un nodo facoltativo e i dispositivi che eseguono Android versione 10 o precedente ignorano questo nodo.

  • Android : sottoalbero dell'estensione Android

    • AAAServerTrustedNames : obbligatorio per i nomi attendibili del server AAA con i seguenti nodi impostati:

      • FQDN : stringa che contiene i nomi attendibili del server AAA. Utilizzare il punto e virgola per separare i nomi attendibili. Ad esempio, example.org;example.com .
CA root private autofirmate
Gli amministratori di rete Passpoint che gestiscono internamente i propri certificati possono fornire profili con una CA privata autofirmata per l'autenticazione AAA.
Consenti l'installazione di profili senza un certificato CA radice
Il certificato CA radice collegato al profilo viene utilizzato per l'autenticazione del server AAA. Gli amministratori di rete Passpoint che desiderano fare affidamento su CA radice pubbliche attendibili per l'autenticazione del server AAA possono fornire profili senza un certificato CA radice. In questo caso, il sistema verifica i certificati del server AAA rispetto ai certificati CA radice pubblici installati nel truststore.

Provisioning del passpoint R2

Android 10 ha introdotto il supporto per le funzionalità Passpoint R2. Passpoint R2 implementa l'iscrizione online (OSU), un metodo standard per fornire nuovi profili Passpoint. Android 10 e versioni successive supportano il provisioning di 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 alcun driver aggiuntivo o supporto 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. Visualizza un elenco dei fornitori di servizi pubblicizzati dall'AP nel selettore Wi-Fi (oltre a visualizzare gli SSID).
  2. Richiede all'utente di toccare uno dei fornitori di servizi per impostare un profilo Passpoint.
  3. Guida l'utente attraverso il flusso di configurazione del profilo Passpoint.
  4. Installa il profilo Passpoint risultante una volta completato con successo.
  5. Si associa alla rete Passpoint utilizzando il profilo Passpoint appena fornito.

Funzionalità di Passpoint R3

Android 12 introduce le seguenti funzionalità di Passpoint R3 che migliorano l'esperienza dell'utente e consentono alle reti di conformarsi alle leggi locali:

Termini e Condizioni

L'accettazione dei termini e delle condizioni è richiesta per legge in alcune località e luoghi 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 visualizzata una notifica quando è necessario accettare termini e condizioni.

L'URL dei termini e delle condizioni deve puntare a un sito Web sicuro tramite HTTPS. Se l'URL punta 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 ai locali di fornire informazioni aggiuntive all'utente, come mappe dei locali, elenchi, promozioni e coupon. Una notifica viene visualizzata all'utente quando la rete è connessa.

L'URL delle informazioni sulla sede deve puntare a un sito Web protetto tramite HTTPS. Se l'URL punta a un sito Web non sicuro, il framework ignora l'URL e non visualizza 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 distribuzione.

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 sono destinate a fallire. Ciò impedisce l'utilizzo del tempo di trasmissione e consente di risparmiare batteria e larghezza di banda del backend. Il framework visualizza una notifica all'utente quando una rete corrispondente al suo profilo è nel raggio d'azione e il profilo è scaduto.
Profili multipli con FQDN identico
Gli operatori che distribuiscono reti Passpoint e utilizzano più ID di rete mobile terrestre pubblica (PLMN) possono fornire più profili Passpoint con lo stesso FQDN, uno per ciascun 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, il consumo energetico e la flessibilità di distribuzione:

Prefisso identificativo decorato
Quando si esegue l'autenticazione su reti con una decorazione di prefisso, il prefisso di identità decorato consente agli operatori di rete di aggiornare l'identificatore di accesso alla rete (NAI) per eseguire l'instradamento esplicito attraverso più proxy all'interno di una rete AAA (vedere RFC 7542 ). Android 12 implementa questa funzionalità secondo la 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 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 allo scadere 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 descrittivo di rete impostato su Example Network
  • FQDN impostato su hotspot.example.net
  • OI del consorzio di roaming (per il roaming)
  • Credenziali con nome utente user , password password codificata con Base64 e realm impostato su example.net
  • Metodo EAP impostato su 21 (EAP-TTLS)
  • Metodo interno 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 credenziale certificato digitale (EAP-TLS)

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

  • Nome descrittivo di rete impostato su GlobalRoaming
  • FQDN impostato su globalroaming.net
  • OI del consorzio di roaming (per il roaming)
  • Regno impostato su users.globalroaming.net
  • Credenziale con un certificato digitale con l'impronta digitale 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 descrittivo di rete impostato su Purple Passpoint
  • FQDN impostato su wlan.mnc888.mcc999.3gppnetwork.org
  • Credenziali 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>

Consulenza sull'autenticazione

I dispositivi che eseguono 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 Dimensione dell'impatto
Operatori e fornitori di servizi Passpoint Aumento del carico sulla rete cellulare. Qualsiasi operatore che utilizza Passpoint R1.
Utenti Opportunità persa di connettersi automaticamente ai punti di accesso Wi-Fi (AP) dell'operatore, con conseguenti costi di dati più elevati. Qualsiasi utente con un dispositivo che funziona su una rete di un operatore che supporta Passpoint R1.

Causa del fallimento

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 e EAP-AKA' sono un insieme parziale di regole incentrate sui guasti 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 osservato alcuna corrispondenza con i fornitori di servizi precedentemente attivi, quindi i dispositivi Passpoint non si sono connessi automaticamente.

Soluzioni alternative

Per aggirare il problema dei criteri di corrispondenza modificati, gli operatori e i fornitori di servizi devono aggiungere l'ambito dell'identificatore di accesso alla rete (NAI) alle informazioni pubblicate dall'AP Passpoint.

La soluzione consigliata prevede che i fornitori di servizi di rete implementino una soluzione alternativa sul lato rete per tempi di distribuzione più rapidi. Una soluzione alternativa lato dispositivo dipende dal fatto che gli OEM raccolgano un elenco di modifiche (CL) da AOSP e quindi 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 dominio NAI come specificato di seguito. Le specifiche Passpoint non richiedono l'elemento ANQP del regno NAI, ma l'aggiunta di questa proprietà è conforme alle specifiche Passpoint, quindi le implementazioni client conformi alle specifiche non dovrebbero interrompersi.

  1. Aggiungi l'elemento ANQP del regno NAI.
  2. Imposta il sottocampo dell'ambito NAI in modo che corrisponda Realm del profilo installato sul dispositivo.
  3. Imposta le seguenti informazioni in base a ciascun tipo EAP:

    • EAP-TTLS: imposta EAPMethod(21) e i tipi di autenticazione interna 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 OEM

Per implementare una soluzione alternativa sul lato dispositivo, gli OEM devono scegliere la patch CL aosp/718508 . Questa patch può essere applicata alle seguenti versioni (non si applica ad Android 10 o versioni successive):

  • Androide 9
  • Android 8.x

Quando la patch viene ritirata, gli OEM devono aggiornare i dispositivi sul campo.