Een VPN-profiel exporteren uit Android voelt als een back-upstap, en het menu dat het aanbiedt doet niets om dat beeld te corrigeren. Wat je meeneemt is een parser-invoer, een sleutel die het besturingssysteem misschien nooit teruggeeft, en een autorisatie die aan precies die telefoon is uitgegeven. Scheid die drie en de nuttige vraag verschijnt: welk deel ontbreekt er nog op het nieuwe apparaat?

Het bestand is het makkelijke deel. De andere twee bepalen of de migratie werkt.

Wat een geëxporteerd profiel werkelijk bevat

Open het bestand in een teksteditor voordat je het vertrouwt. Een OpenVPN-profiel is een kleine configuratietaal: remote, proto, data-ciphers en vaak inline blokken <ca>, <cert>, <key> of <tls-crypt> die de client aan zijn TLS-stack geeft. Een WireGuard-configuratie is platter: [Interface] bevat PrivateKey en Address, dan één [Peer] per eindpunt met PublicKey, AllowedIPs en Endpoint. IKEv2 komt als .mobileconfig met payload-woordenboeken in plaats van sleutelblokken.

Niets van die tekst is op zichzelf een inloggegeven. Het inloggegeven is de privésleutel, en elk formaat plakt die inline of verwijst naar een alias die alleen binnen de client wordt opgelost die hem heeft gemaakt.

Waar de sleutel echt woont op Android

Android bewaart appgegevens onder /data/data/<package>, alleen leesbaar door de UID van die app. Er is geen ondersteunde manier om de privémap van een andere app van een niet-geroote telefoon te kopiëren, en adb backup was geen algemeen antwoord meer nadat Android 12 het afschafte en clients allowBackup="false" begonnen te declareren. Een export uit een Android-client betekent dus wat die client implementeert, niet een kopie van het bestandssysteem.

De identiteitslaag zit onder de app. Als een client je sleutel in de Android Keystore heeft geïmporteerd, wordt het materiaal daar gegenereerd of ingepakt, en latere exports kunnen een verwijzing naar een Keystore-alias dragen in plaats van de bytes. Hardware-ondersteunde sleutels zijn zo gebouwd dat zelfs de eigen app ze niet kan uitlezen, zoals Keystore documentation beschrijft, dus een profiel dat naar die alias verwijst, importeert schoon op dezelfde telefoon en faalt overal elders.

Dat is geen kapotte export. Het is de eigenschap die de platform is gevraagd te leveren.

Wat een profiel niet kan overbrengen

Zet de objecten tegenover wat een bestemming accepteert:

ObjectGaat over?Waarom
Protocol en eindpuntJa, als de doelclient het ondersteuntPlatte tekst in het profiel
CA-certificaat en hostnaamcontroleMeestalOpenbaar materiaal, maar de hostnaam moet nog steeds bij het certificaat passen
ClientcertificaatJa, tenzij het per apparaat is gebondenCertificaten zijn overdraagbaar; de uitgever bepaalt hoeveel apparaten er één mogen gebruiken
PrivésleutelAlleen als die buiten de Keystore is gegenereerdHardware-ondersteunde sleutels kunnen niet worden geëxporteerd, alleen vervangen
Account, MFA, SSO-sessieNeeTokens verlopen en blijven gebonden aan het apparaat dat ze heeft verkregen
Routes, DNS en app-bereikAlleen als configuratietekstAndroid past ze toe bij verbinden via VpnService.Builder
App-lijst voor split-tunnelZeldenPakketnamen verschillen per apparaat, en de lijst is clientstatus

Twee rijen veroorzaken het meeste misverstand. Een sleutel die op het apparaat is gegenereerd en als niet-exporteerbaar is gemarkeerd, is echt weg met de appgegevens, dus de vervanging is een nieuwe sleutel plus een certificaat dat daarvoor is uitgegeven. Een sessietoken dat naar een nieuwe telefoon is gekopieerd, sterft meestal bij de eerste verversing, wat leest als een mislukte import.

Import is een parse, dan een toestemmingsvraag

Aan de ontvangende kant is import een parse gevolgd door een commit. De client leest de configuratie, controleert dat elk genoemd blok bestaat, en schrijft dan de tunnedefinitie in zijn eigen sandbox, waardoor het bestand dat je uit Downloads koos niet is wat daarna verbindt.

Dan komt een autorisatiestap die geen enkel bestand kan overslaan. Android eist dat de app VpnService.prepare() aanroept en jouw toestemming krijgt voordat hij een tunnel mag opzetten, dus een net geïmporteerd profiel toont nog één keer de systeemdialoog. Daarna wordt de tunnel expliciet opgebouwd via addAddress, addRoute, addDnsServer en addAllowedApplication of addDisallowedApplication voor routing per app. Niets daarvan wordt door een eindpunt geïmpliceerd, dus hetzelfde profiel kan in twee clients een andere effectieve routeset opleveren.

Certificaatgebaseerde opstellingen voegen nog een vertakking toe. Wanneer de server een certificaat uitgeeft aan een specifiek apparaat, zoals MDM en SCEP-enrollment doen, werkt hergebruik op een tweede telefoon ofwel tot de server één sessie per identiteit afdwingt, ofwel mislukt het bij de TLS-handshake. Controleer het beleid van de uitgever voordat je hergebruik plant.

Verifieer het nieuwe apparaat voordat je het oude uit dienst neemt

Houd de oude telefoon verbonden tot de nieuwe iets beters dan een groen pictogram heeft doorstaan. Bevestig het uitgaande adres vanaf het nieuwe apparaat en de DNS-resolver die het werkelijk gebruikte. Als split tunneling ertoe doet, start dan een app die de tunnel zou moeten omzeilen en een die dat niet zou moeten, en kijk welke je provider bereikt.

Eén controle beslecht het uitgaande adres. Open https://ifconfig.me in de browser van de telefoon, voer daarna curl -s https://ifconfig.me uit vanaf een laptop op dezelfde Wi-Fi en vergelijk beide antwoorden met het adres dat je provider heeft toegewezen.

Pas dan neem je de oude identiteit uit dienst, en doe dat via de uitgever: trek het certificaat in of verwijder het apparaat uit het account. Een bestand uit Downloads verwijderen beëindigt niets, omdat twee apparaten met hetzelfde certificaat er in het serverlog identiek uitzien.

Als de export niet overdraagbaar blijkt, is de oplossing een nieuwe inschrijving in plaats van een openbare configuratiebundel. Vraag een profiel voor een tweede apparaat, of genereer het sleutelpaar op de nieuwe telefoon en dien de CSR in; langzamer, en het is de weg die de uitgever ondersteunt.

Loop de checklist door voordat je iets verwijdert: nieuw apparaat verbindt, uitgaand adres en DNS komen overeen, app-bereik is zoals bedoeld, oude identiteit is ingetrokken, en elk bewaard configuratiebestand staat in versleutelde opslag.

Gerelateerde artikelen