Exportação de VPN no Android: o que realmente passa para um telefone novo
Uma exportação de VPN no Android envia definições e por vezes uma chave, mas nunca a autorização do dispositivo. Verifique o que realmente passa antes de apagar o telefone antigo.
Exportar um perfil de VPN do Android parece um passo de cópia de segurança, e o menu que o oferece não faz nada para corrigir essa impressão. O que leva consigo é uma entrada para um analisador, uma chave que o sistema operativo pode nunca devolver e uma autorização emitida exatamente para esse telefone. Separe as três coisas e surge a pergunta útil: que peça ainda falta no dispositivo novo?
O ficheiro é a parte fácil. As outras duas decidem se a migração funciona.
O que um perfil exportado contém realmente
Abra o ficheiro num editor de texto antes de confiar nele. Um perfil OpenVPN é uma pequena linguagem de configuração: remote, proto, data-ciphers e muitas vezes blocos <ca>, <cert>, <key> ou <tls-crypt> em linha que o cliente entrega à sua pilha TLS. Uma configuração WireGuard é mais plana: [Interface] contém PrivateKey e Address, depois um [Peer] por ponto final com PublicKey, AllowedIPs e Endpoint. O IKEv2 chega como .mobileconfig com dicionários de carga útil em vez de blocos de chaves.
Nada desse texto é uma credencial por si só. A credencial é a chave privada, e cada formato cola-a em linha ou aponta para um alias que só é resolvido dentro do cliente que o criou.
Onde a chave vive realmente no Android
O Android guarda os dados das aplicações em /data/data/<package>, legíveis apenas pelo UID dessa aplicação. Não há forma suportada de copiar o diretório privado de outra aplicação de um telefone sem root, e adb backup deixou de ser uma resposta geral quando o Android 12 o descontinuou e os clientes começaram a declarar allowBackup="false". Por isso, uma exportação de um cliente Android significa o que esse cliente implementa, não uma cópia do sistema de ficheiros.
A camada de identidade está por baixo da aplicação. Se um cliente importou a sua chave para o Android Keystore, o material é gerado ou envolvido ali, e exportações posteriores podem levar uma referência a um alias do Keystore em vez dos bytes. As chaves com suporte de hardware são construídas para que nem a aplicação proprietária as consiga ler, como descreve Keystore documentation, por isso um perfil que aponta para esse alias é importado sem problemas no mesmo telefone e falha em qualquer outro lugar.
Isso não é uma exportação avariada. É a propriedade que se pediu à plataforma.
O que um perfil não consegue transportar
Compare os objetos com o que um destino aceitará:
| Objeto | Passa? | Porquê |
|---|---|---|
| Protocolo e ponto final | Sim, se o cliente de destino o suportar | Texto simples no perfil |
| Certificado CA e verificação do nome do anfitrião | Normalmente | Material público, mas o nome do anfitrião tem de continuar a coincidir com o certificado |
| Certificado de cliente | Sim, exceto se estiver vinculado por dispositivo | Os certificados são portáveis; o emissor decide quantos dispositivos podem usar um |
| Chave privada | Apenas se tiver sido gerada fora do Keystore | As chaves com suporte de hardware não podem ser exportadas, apenas substituídas |
| Conta, MFA, sessão SSO | Não | Os tokens expiram e ficam vinculados ao dispositivo que os obteve |
| Rotas, DNS e âmbito das aplicações | Apenas como texto de configuração | O Android aplica-as ao ligar através do VpnService.Builder |
| Lista de aplicações em túnel dividido | Raramente | Os nomes de pacote diferem entre dispositivos, e a lista é estado do cliente |
Duas linhas causam a maior parte da confusão. Uma chave gerada no dispositivo e marcada como não exportável desaparece mesmo com os dados da aplicação, por isso a substituição é uma chave nova mais um certificado emitido para ela. Um token de sessão copiado para um telefone novo morre normalmente na primeira atualização, o que se lê como uma importação falhada.
A importação é uma análise e depois um pedido de consentimento
Do lado recetor, a importação é uma análise seguida de uma confirmação. O cliente lê a configuração, verifica que cada bloco referenciado existe e depois escreve a definição do túnel no seu próprio ambiente isolado, e é por isso que o ficheiro escolhido em Transferências não é o que se liga depois.
Depois vem um passo de autorização que nenhum ficheiro pode saltar. O Android exige que a aplicação chame VpnService.prepare() e receba o seu consentimento antes de poder estabelecer um túnel, por isso um perfil acabado de importar ainda mostra o diálogo do sistema uma vez. Depois o túnel é construído explicitamente através de addAddress, addRoute, addDnsServer e addAllowedApplication ou addDisallowedApplication para o encaminhamento por aplicação. Nada disso é implícito num ponto final, por isso o mesmo perfil pode produzir um conjunto de rotas efetivas diferente em dois clientes.
As configurações baseadas em certificados acrescentam outra bifurcação. Quando o servidor emite um certificado a um dispositivo específico, como fazem o MDM e o registo SCEP, reutilizá-lo num segundo telefone ou funciona até o servidor impor uma sessão por identidade, ou falha no aperto de mão TLS. Verifique a política do emissor antes de planear a reutilização.
Verifique o dispositivo novo antes de retirar o antigo
Mantenha o telefone antigo ligado até o novo ter passado algo melhor do que um ícone verde. Confirme o endereço de saída do dispositivo novo e o resolvedor DNS que ele realmente utilizou. Se split tunneling importa, abra uma aplicação que deve contornar o túnel e outra que não deve, e veja qual chega ao seu fornecedor.
Uma verificação resolve o endereço de saída. Abra https://ifconfig.me no navegador do telefone, depois execute curl -s https://ifconfig.me a partir de um portátil na mesma Wi-Fi e compare as duas respostas com o endereço atribuído pelo fornecedor.
Só então retire a identidade antiga, e faça-o através do emissor: revogue o certificado ou remova o dispositivo da conta. Apagar um ficheiro de Transferências não termina nada, porque dois dispositivos com o mesmo certificado parecem idênticos no registo do servidor.
Se a exportação se revelar não portátil, a solução é um novo registo e não um pacote de configuração público. Peça um perfil para um segundo dispositivo, ou gere o par de chaves no telefone novo e submeta o CSR; mais lento, e é o caminho que o emissor suporta.
Passe a lista de verificação antes de apagar seja o que for: o dispositivo novo liga, o endereço de saída e o DNS coincidem, o âmbito por aplicação é o pretendido, a identidade antiga está revogada, e qualquer ficheiro de configuração guardado está em armazenamento cifrado.