Esportazione VPN Android: cosa passa davvero su un telefono nuovo
Un'esportazione VPN Android invia impostazioni e talvolta una chiave, ma mai l'autorizzazione del dispositivo. Controlla cosa passa davvero prima di cancellare il vecchio telefono.
Esportare un profilo VPN da Android sembra un passaggio di backup, e il menu che lo offre non fa nulla per correggere quell'impressione. Quello che porti via è un input per un parser, una chiave che il sistema operativo potrebbe non restituire mai, e un'autorizzazione emessa per quel telefono specifico. Separa questi tre elementi e appare la domanda utile: quale pezzo manca ancora sul nuovo dispositivo?
Il file è la parte facile. Gli altri due decidono se la migrazione funziona.
Cosa contiene davvero un profilo esportato
Apri il file in un editor di testo prima di fidarti. Un profilo OpenVPN è un piccolo linguaggio di configurazione: remote, proto, data-ciphers e spesso blocchi <ca>, <cert>, <key> o <tls-crypt> in linea che il client passa al suo stack TLS. Una configurazione WireGuard è più piatta: [Interface] contiene PrivateKey e Address, poi un [Peer] per endpoint con PublicKey, AllowedIPs e Endpoint. IKEv2 arriva come .mobileconfig con dizionari di payload invece di blocchi di chiavi.
Nessuno di quei testi è una credenziale di per sé. La credenziale è la chiave privata, e ogni formato la incolla in linea o punta a un alias che si risolve solo dentro il client che l'ha creata.
Dove vive davvero la chiave su Android
Android conserva i dati delle app sotto /data/data/<package>, leggibili solo dall'UID di quell'app. Non esiste un modo supportato per copiare la directory privata di un'altra app da un telefono senza root, e adb backup ha smesso di essere una risposta generale quando Android 12 lo ha deprecato e i client hanno iniziato a dichiarare allowBackup="false". Quindi un'esportazione da un client Android significa ciò che quel client implementa, non una copia del filesystem.
Il livello di identità sta sotto l'app. Se un client ha importato la tua chiave nell'Android Keystore, il materiale viene generato o incapsulato lì, e le esportazioni successive possono portare un riferimento a un alias Keystore invece dei byte. Le chiavi con supporto hardware sono costruite in modo che nemmeno l'app proprietaria possa leggerle, come descrive Keystore documentation, quindi un profilo che punta a quell'alias si importa pulito sullo stesso telefono e fallisce ovunque altro.
Non è un'esportazione rotta. È la proprietà che è stato chiesto alla piattaforma di fornire.
Cosa un profilo non può trasportare
Metti gli oggetti a confronto con ciò che una destinazione accetterà:
| Oggetto | Si trasferisce? | Perché |
|---|---|---|
| Protocollo ed endpoint | Sì, se il client di destinazione lo supporta | Testo in chiaro nel profilo |
| Certificato CA e controllo del nome host | Di solito | Materiale pubblico, ma il nome host deve comunque corrispondere al certificato |
| Certificato client | Sì, a meno che non sia legato per dispositivo | I certificati sono portabili; l'emittente decide quanti dispositivi possono usarne uno |
| Chiave privata | Solo se generata fuori dal Keystore | Le chiavi con supporto hardware non si possono esportare, solo sostituire |
| Account, MFA, sessione SSO | No | I token scadono e restano legati al dispositivo che li ha ottenuti |
| Rotte, DNS e ambito delle app | Solo come testo di configurazione | Android le applica alla connessione tramite VpnService.Builder |
| Elenco app in tunnel diviso | Raramente | I nomi dei pacchetti differiscono tra dispositivi, e l'elenco è stato del client |
Due righe causano la maggior parte della confusione. Una chiave generata sul dispositivo e marcata non esportabile sparisce davvero con i dati dell'app, quindi la sostituzione è una nuova chiave più un certificato emesso per essa. Un token di sessione copiato su un telefono nuovo di solito muore al primo aggiornamento, il che si legge come un'importazione fallita.
L'importazione è un'analisi, poi una richiesta di consenso
Lato ricevente, l'importazione è un'analisi seguita da un commit. Il client legge la configurazione, verifica che ogni blocco referenziato esista, poi scrive la definizione del tunnel nella propria sandbox, ed è per questo che il file scelto da Download non è ciò che si connette dopo.
Poi arriva un passaggio di autorizzazione che nessun file può saltare. Android impone che l'app chiami VpnService.prepare() e riceva il tuo consenso prima di poter stabilire un tunnel, quindi un profilo appena importato mostra comunque una volta la finestra di sistema. Poi il tunnel viene costruito esplicitamente tramite addAddress, addRoute, addDnsServer e addAllowedApplication o addDisallowedApplication per l'instradamento per app. Nulla di ciò è implicato da un endpoint, quindi lo stesso profilo può produrre un insieme di rotte effettive diverso in due client.
Le configurazioni basate su certificati aggiungono un'altra biforcazione. Quando il server emette un certificato per un dispositivo specifico, come fanno MDM e l'enrollment SCEP, riusarlo su un secondo telefono o funziona finché il server impone una sessione per identità o fallisce alla stretta di mano TLS. Controlla la policy dell'emittente prima di pianificare il riuso.
Verifica il nuovo dispositivo prima di ritirare il vecchio
Tieni il vecchio telefono connesso finché il nuovo non ha superato qualcosa di meglio di un'icona verde. Conferma l'indirizzo di uscita dal nuovo dispositivo e il resolver DNS che ha realmente usato. Se split tunneling conta, avvia un'app che dovrebbe aggirare il tunnel e una che non dovrebbe, poi guarda quale raggiunge il tuo provider.
Un controllo risolve l'indirizzo di uscita. Apri https://ifconfig.me nel browser del telefono, poi esegui curl -s https://ifconfig.me da un portatile sulla stessa Wi-Fi e confronta entrambe le risposte con l'indirizzo assegnato dal provider.
Solo allora ritira la vecchia identità, e fallo tramite l'emittente: revoca il certificato o rimuovi il dispositivo dall'account. Cancellare un file da Download non termina nulla, perché due dispositivi con lo stesso certificato appaiono identici nel log del server.
Se l'esportazione risulta non portabile, la soluzione è una nuova registrazione anziché un bundle di configurazione pubblico. Chiedi un profilo per un secondo dispositivo, o genera la coppia di chiavi sul nuovo telefono e invia la CSR; più lento, ed è la strada che l'emittente supporta.
Esegui la lista di controllo prima di cancellare qualsiasi cosa: il nuovo dispositivo si connette, indirizzo di uscita e DNS coincidono, l'ambito per app è quello voluto, la vecchia identità è revocata, e ogni file di configurazione conservato si trova in archiviazione cifrata.