Dois perfis, um liga-se e o outro não, e a forma rápida de ver porquê é um diff. O problema é que o mesmo diff imprime a chave privada inline, a chave estática e qualquer bloco de credenciais que o ficheiro contenha, e as pessoas colam a saída num chat antes de perceberem. Decidir o que está a comparar vem antes de executar o comando. Compare a estrutura e as funções em cópias protegidas, e crie um ficheiro expurgado à parte quando outra pessoa precisar de o ver.

O que um ficheiro .ovpn contém realmente

Um ficheiro .ovpn é uma configuração com blocos inline opcionais. Pode conter um certificado CA, um certificado de cliente, uma chave privada, uma chave tls-auth ou tls-crypt, e diretivas que apontam para ficheiros externos ou pedem credenciais. Dois ficheiros podem parecer quase idênticos e diferir apenas dentro de um bloco, ou numa diretiva que altera o transporte por completo. O número de linhas não lhe diz nada sobre qual dessas coisas aconteceu.

Uma diferença dentro de um bloco de chave não é prova pública de nada. Um certificado reemitido e um com chave renovada podem produzir a mesma forma de alteração, pelo que a divergência do bloco diz que o material é diferente, não que decisão o produziu. Trate-a como um sinal para comparar campos, não como uma conclusão.

Compare por função, não por linha

Siga a ordem própria da ligação: primeiro o ponto final e o transporte, depois a confiança e a identidade esperada, depois a autenticação de utilizador, depois as rotas, o DNS e os ganchos de script. Essa sequência corresponde ao que o cliente faz, pelo que a primeira diferença que encontrar é a primeira coisa que pode ter quebrado a ligação. Comparar por ordem alfabética, em vez disso, dispersa as definições relacionadas por toda a saída.

Uma passagem consciente dos campos observa estes itens, nessa ordem. Tudo o que o cliente pede de forma interativa pertence à linha de autenticação e não às linhas de confiança.

  • remote, proto e porta, incluindo cada bloco de ligação.
  • ca e cert: emitente, assunto e data de expiração.
  • Se existe uma chave privada, nunca o que contém.
  • tls-auth ou tls-crypt presença e direção da chave.
  • Diretivas de autenticação, incluindo qualquer referência a um ficheiro de credenciais.
  • Rotas, opções de DNS e ganchos de script executados ao ligar.

Quando um ficheiro contém vários blocos de ligação, mantenha cada opção com o seu ponto final. Comparar apenas a primeira linha remote pode perder a alternativa que o cliente escolhe realmente nesta rede.

Porque é que um diff simples é a ferramenta errada

Um diff simples é feito para texto, não para segredos. Imprime alegremente uma chave privada no histórico do ecrã, e não lhe diz que a diretiva que está a fixar é irrelevante para a falha. As extrações de campos são simultaneamente mais seguras e mais legíveis, porque o material do certificado pode ser comparado como metadados em vez de bytes.

openssl x509 -in ca.crt -noout -subject -issuer -enddate
openssl x509 -in client.crt -noout -subject -issuer -enddate
grep -E '^(remote|proto|port|tls-auth|tls-crypt|route|dhcp-option)' profile.ovpn

Os dois primeiros comandos imprimem identidade e validade sem tocar na chave, pelo que a sua saída é segura de colar. O grep imprime nomes e valores de diretivas mas nunca os corpos dos blocos, o que o torna a primeira passagem correta quando suspeita de uma diferença de transporte ou de encaminhamento. Se for necessário comparar um bloco, compare o hash em vez do conteúdo.

Crie uma cópia expurgada para o ticket

Remova os segredos reais e os identificadores desnecessários mantendo os nomes dos campos e estrutura suficiente para explicar a diferença. Um marcador da mesma forma revela ainda onde está o material e qual era o comprimento, pelo que decida se até isso é aceitável. Verifique o próprio anexo final em vez de confiar no comando que se lembra de ter executado. Não edite o original de trabalho só para produzir um exemplo, porque um perfil expurgado não é necessariamente executável e nunca deve ser reimportado.

Mantenha os originais identificáveis por nome de ficheiro e hash em vez de os copiar para três diretórios com nomes semelhantes. Uma cadeia de hash basta para provar que ficheiro foi revisto e não custa nada se escapar. Pode as cópias depois de a alteração ser fechada, para que a pessoa seguinte herde um único ficheiro autoritativo.

Mantenha a comparação ligada a uma falha

Uma comparação justifica o custo quando responde a uma pergunta sobre uma importação ou uma falha de ligação. Nomeie primeiro o passo que falha e depois compare apenas os campos de que esse passo depende; reunir todas as credenciais do cliente num só diretório torna a próxima fuga mais provável e o próximo diagnóstico mais lento. Quanto mais estreita a pergunta, mais curta a lista de campos que lhe podem responder.

Se um ficheiro novo veio do operador, confirme o seu caminho de distribuição antes de substituir material de confiança. Após a alteração, inspecione a cópia importada que o cliente escolheu realmente e o resultado negociado, porque outra versão do cliente pode ignorar ou ler de forma diferente uma diretiva. O ficheiro no disco não é prova da ligação que correu. A semântica das diretivas está no manual do OpenVPN 2.6.

Artigos relacionados