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á:

ObjetoPassa?Porquê
Protocolo e ponto finalSim, se o cliente de destino o suportarTexto simples no perfil
Certificado CA e verificação do nome do anfitriãoNormalmenteMaterial público, mas o nome do anfitrião tem de continuar a coincidir com o certificado
Certificado de clienteSim, exceto se estiver vinculado por dispositivoOs certificados são portáveis; o emissor decide quantos dispositivos podem usar um
Chave privadaApenas se tiver sido gerada fora do KeystoreAs chaves com suporte de hardware não podem ser exportadas, apenas substituídas
Conta, MFA, sessão SSONãoOs tokens expiram e ficam vinculados ao dispositivo que os obteve
Rotas, DNS e âmbito das aplicaçõesApenas como texto de configuraçãoO Android aplica-as ao ligar através do VpnService.Builder
Lista de aplicações em túnel divididoRaramenteOs 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.

Artigos relacionados