Android VPN-eksport: hvad der faktisk overføres til en ny telefon
En Android VPN-eksport sender indstillinger og nogle gange en nøgle, men aldrig enhedsgodkendelsen. Kontrollér, hvad der faktisk flyttes, før du sletter den gamle telefon.
At eksportere en VPN-profil fra Android føles som et backup-trin, og menuen, der tilbyder det, gør intet for at rette det indtryk. Det, du går derfra med, er et parser-input, en nøgle som styresystemet måske aldrig giver tilbage, og en godkendelse udstedt til netop den telefon. Skil de tre ting ad, og det nyttige spørgsmål dukker op: hvilken del mangler stadig på den nye enhed?
Filen er den nemme del. De to andre afgør, om migreringen virker.
Hvad en eksporteret profil faktisk indeholder
Åbn filen i en teksteditor, før du stoler på den. En OpenVPN-profil er et lille konfigurationssprog: remote, proto, data-ciphers og ofte inline-blokke <ca>, <cert>, <key> eller <tls-crypt>, som klienten giver videre til sin TLS-stak. En WireGuard-konfiguration er fladere, hvor [Interface] holder PrivateKey og Address, derefter en [Peer] pr. endpoint med PublicKey, AllowedIPs og Endpoint. IKEv2 kommer som en .mobileconfig med payload-ordbøger i stedet for nøgleblokke.
Intet af den tekst er en legitimationsoplysning i sig selv. Legitimationsoplysningen er den private nøgle, og hvert format enten indsætter den inline eller peger på et alias, som kun opløses inde i den klient, der oprettede det.
Hvor nøglen faktisk bor på Android
Android opbevarer appdata under /data/data/<package>, læsbare af netop den apps UID. Der findes ingen understøttet måde at kopiere en anden apps private mappe fra en telefon uden root, og adb backup holdt op med at være et generelt svar, efter at Android 12 afskaffede det, og klienter begyndte at erklære allowBackup="false". Så en eksport fra en Android-klient betyder det, klienten implementerer, ikke en kopi af filsystemet.
Identitetslaget ligger under appen. Hvis en klient importerede din nøgle til Android Keystore, genereres eller indpakkes materialet der, og senere eksporter kan bære en reference til et Keystore-alias i stedet for bytes. Hardwareunderstøttede nøgler er bygget, så selv den ejende app ikke kan læse dem ud, som Keystore documentation beskriver, så en profil, der peger på det alias, importeres rent på samme telefon og fejler alle andre steder.
Det er ikke en ødelagt eksport. Det er den egenskab, platformen blev bedt om at levere.
Hvad en profil ikke kan overføre
Stil objekterne op mod, hvad en destination accepterer:
| Objekt | Overføres? | Hvorfor |
|---|---|---|
| Protokol og endpoint | Ja, hvis destinationsklienten taler det | Klar tekst i profilen |
| CA-certifikat og hostname-kontrol | Som regel | Offentligt materiale, men værtsnavnet skal stadig matche certifikatet |
| Klientcertifikat | Ja, medmindre det er bundet pr. enhed | Certifikater er flytbare; udstederen bestemmer, hvor mange enheder der må bruge ét |
| Privat nøgle | Kun hvis den er genereret uden for Keystore | Hardwareunderstøttede nøgler kan ikke eksporteres, kun erstattes |
| Konto, MFA, SSO-session | Nej | Tokens udløber og forbliver bundet til den enhed, der fik dem |
| Ruter, DNS og app-omfang | Kun som konfigurationstekst | Android anvender dem ved forbindelse gennem VpnService.Builder |
| App-liste til split-tunnel | Sjældent | Pakkenavne er forskellige mellem enheder, og listen er klienttilstand |
To rækker skaber det meste af forvirringen. En nøgle, der genereres på enheden og markeres som ikke-eksporterbar, er reelt væk med appdataene, så erstatningen er en ny nøgle plus et certifikat udstedt til den. Et sessionstoken kopieret til en ny telefon dør som regel ved første opdatering, hvilket ser ud som en mislykket import.
Import er en parsing og derefter en samtykkeprompt
På modtagersiden er import en parsing efterfulgt af en commit. Klienten læser konfigurationen, kontrollerer, at hver refereret blok findes, og skriver derefter tunneldefinitionen i sin egen sandkasse, og derfor er filen, du valgte fra Downloads, ikke det, der forbinder bagefter.
Så kommer et godkendelsestrin, som ingen fil kan springe over. Android kræver, at appen kalder VpnService.prepare() og får dit samtykke, før den må etablere en tunnel, så en nyimporteret profil viser stadig systemdialogen én gang. Derefter bygges tunnelen eksplicit gennem addAddress, addRoute, addDnsServer og addAllowedApplication eller addDisallowedApplication til routing pr. app. Intet af det følger af et endpoint, så den samme profil kan give et andet effektivt rutesæt i to klienter.
Certifikatbaserede opsætninger tilføjer en ekstra forgrening. Når serveren udsteder et certifikat til en bestemt enhed, som MDM- og SCEP-tilmelding gør, virker genbrug på en anden telefon enten, indtil serveren håndhæver én session pr. identitet, eller fejler ved TLS-håndtrykket. Tjek udstederens politik, før du planlægger at genbruge det.
Bekræft den nye enhed, før du pensionerer den gamle
Hold den gamle telefon forbundet, indtil den nye har bestået noget bedre end et grønt ikon. Bekræft udgangsadressen fra den nye enhed og den DNS-resolver, den faktisk brugte. Hvis split tunneling betyder noget, start en app, der skal omgå tunnelen, og en, der ikke skal, og se, hvilken der når din udbyder.
Én kontrol afgør udgangsadressen. Åbn https://ifconfig.me i telefonens browser, kør derefter curl -s https://ifconfig.me fra en bærbar på samme Wi-Fi, og sammenlign begge svar med den adresse, din udbyder tildelte.
Først da pensionerer du den gamle identitet, og gør det gennem udstederen: tilbagekald certifikatet eller fjern enheden fra kontoen. At slette en fil fra Downloads afslutter intet, fordi to enheder med samme certifikat ser identiske ud i serverloggen.
Hvis eksporten viser sig ikke at kunne flyttes, er løsningen en ny tilmelding snarere end en offentlig konfigurationspakke. Bed om en profil til en ekstra enhed, eller generer nøgleparret på den nye telefon og indsend CSR'en; langsommere, og det er den vej, udstederen understøtter.
Kør tjeklisten, før du sletter noget: ny enhed forbinder, udgangsadresse og DNS stemmer, app-omfanget er som tilsigtet, gammel identitet er tilbagekaldt, og enhver konfigurationsfil, du har beholdt, ligger i krypteret lager.