In breve. Il CNA (Captive Network Assistant) è il meccanismo con cui iPhone, Android e Windows capiscono se sei dietro un captive portal e ti aprono la pagina di login in un mini-browser dedicato. È nato per necessità: con il passaggio di massa a HTTPS, i vecchi hotspot che dirottavano il browser avevano smesso di funzionare.

Cos’è il CNA?

È un piccolo agente del sistema operativo del telefono (o del PC) che, appena ti colleghi a una rete Wi-Fi, verifica se c’è davvero internet o se sei “prigioniero” dietro una pagina di login. Lo fa chiedendo una pagina nota su HTTP; se la risposta non è quella attesa, conclude che c’è un captive portal e ti apre la pagina di accesso in un browser limitato. Apple lo chiama Captive Network Assistant, ma Android, Windows e le altre piattaforme hanno lo stesso meccanismo con nomi diversi.

Perché un hotspot “normale” ha smesso di funzionare?

Qui sta il motivo per cui il CNA esiste. Un tempo il 99% dei siti — Google compreso — era in HTTP. L’hotspot poteva intercettare qualunque pagina che il browser chiedeva e rispondere con un redirect alla pagina di login: funzionava sempre, perché l’HTTP non è protetto e può essere dirottato.

Con l’arrivo massiccio di HTTPS la cosa si è rotta. Una richiesta HTTPS non si può dirottare: il protocollo TLS è fatto apposta per accorgersi se qualcuno si mette in mezzo. Se l’hotspot prova a rispondere al posto del sito, il browser riceve un certificato che non combacia e lo interpreta per quello che è — un attacco man-in-the-middle — e blocca tutto con un errore di certificato, invece di mostrare la pagina di login. In pratica: se il primo sito che apri è HTTPS (e oggi lo sono quasi tutti), il vecchio redirect non produce il portale ma un errore.

⚠️ Attenzione: l’errore di certificato non è un difetto: è esattamente il comportamento voluto dall’HTTPS. Serve a impedire che qualcuno — incluso l’hotspot — si infili tra te e il sito. Per questo un captive portal può dirottare solo l’HTTP, mai l’HTTPS.

Come fa il CNA a capire se sei dietro un captive portal?

Facendo una probe su HTTP verso un indirizzo del proprio produttore e controllando la risposta:

Apple     -> http://captive.apple.com/hotspot-detect.html   (attende una pagina "Success")
Android   -> http://connectivitycheck.gstatic.com/generate_204  (attende un 204 No Content)
Windows   -> http://www.msftconnecttest.com/connecttest.txt  (attende un testo preciso)

Se la probe torna la risposta attesa, il telefono conclude “c’è internet” e non mostra nulla. Se invece l’hotspot la intercetta e risponde con un redirect (un HTTP 302 verso la pagina di login), il telefono capisce che è “captive” e fa partire il CNA. È per questo che la probe è volutamente in HTTP: deve poter essere dirottata.

Cos’è il “browser limitato”?

È un mini-browser di sistema (una WebView ristretta) che il telefono apre solo per la pagina del captive portal. È “limitato” apposta: niente sessione completa, niente estensioni, si chiude appena ti sei autenticato. Serve a farti fare il login in sicurezza senza aprire il tuo browser vero sulla rete non ancora fidata.

Cosa significa per chi configura un hotspot?

Due conseguenze pratiche, importanti:

  • Il captive funziona perché il CNA fa la probe in HTTP e riceve il redirect. Non whitelistare mai gli indirizzi delle probe (es. captive.apple.com) prima del login: se la probe raggiunge il vero server, il telefono crede di essere online e non mostra il portale.
  • La pagina di login può essere servita in HTTPS (consigliato), ma serve un certificato valido: con un certificato autofirmato/sbagliato il mini-browser del CNA lo rifiuta e il portale non compare. È la causa numero uno dei portali che “non partono” su iPhone.

Il dettaglio di come RouterOS gestisce tutto questo — l’intercettazione, l’opzione DHCP 114, il certificato — è nell’howto Captive portal e iPhone: la DHCP option 114.

Domande frequenti

Perché non posso far aprire il portale con un sito HTTPS?

Perché l’HTTPS non è dirottabile: il browser vedrebbe un certificato non valido e lo bloccherebbe come un attacco. Il portale si apre partendo da una probe/pagina in HTTP; la pagina di login, quella sì, può essere in HTTPS purché con un certificato valido.

Il CNA è uguale su tutti i dispositivi?

Il principio è lo stesso (probe in HTTP, mini-browser per il login), ma indirizzi di probe e dettagli cambiano tra Apple, Android/Google, Microsoft. Per questo un hotspot va provato con più dispositivi.

Se apro il browser a mano arrivo al portale?

Solo se vai su un sito HTTP (es. neverssl.com): quello viene dirottato. Un sito HTTPS no, dà un errore di connessione.