Um erro de «nenhuma cifra partilhada» soa a uma única definição a mudar, e a definição que a maioria das pessoas muda é a errada. OpenVPN mantém políticas separadas para o canal de controlo que faz o aperto de mão TLS e para o canal de dados que transporta pacotes dentro do túnel, e o erro nomeia o primeiro enquanto as pessoas editam o segundo. Comparar o que cada par permite, pela ordem correta, transforma as suposições em duas ou três decisões: versão, depois lista de suítes, depois credenciais.

Erre essa ordem e pode perder uma hora a acrescentar um nome AES a uma lista que nunca foi consultada.

Duas listas de cifra, e só uma quebra o aperto de mão

O canal de controlo negocia uma sessão TLS, e a sua política escreve-se com tls-cipher para TLS 1.2 e tls-ciphersuites para TLS 1.3. O canal de dados configura-se à parte com data-ciphers, onde uma divergência produz uma ligação que se estabelece e depois não consegue passar tráfego. Ambos produzem erros que mencionam cifras, e é por isso que se confundem. Um aperto de mão que nunca se completa aponta para o canal de controlo, enquanto um túnel estabelecido que descarta pacotes aponta para o canal de dados.

Leia a mensagem inteira em vez da primeira linha. Uma divergência de versão, uma suíte em falta, um algoritmo de assinatura de certificado que o par rejeita e uma falha de verificação do nome de anfitrião terminam todos num erro TLS, e só um deles diz respeito à sua lista de suítes. Separar essas categorias é a maior parte do diagnóstico.

Compare as versões antes de comparar as suítes

Um par limitado a TLS 1.2 e um par que exige 1.3 não partilham versão, e nenhuma cadeia de cifra ultrapassa isso. Anote tls-version-min e tls-version-max nos dois lados, ou os valores predefinidos das compilações em uso, porque a política OpenSSL de uma distribuição pode subir o mínimo sem que nenhuma opção do OpenVPN o diga. Se um lado for um equipamento ou um cliente de terceiros, a sua janela é o que o firmware permite. Só quando as janelas se sobrepõem é que uma comparação de suítes significa algo.

Esses registos também devem nomear os binários reais. Um openvpn de linha de comandos no seu portátil não é necessariamente o cliente que trata um perfil importado.

As listas TLS 1.2 e TLS 1.3 não se misturam

Os nomes de suíte TLS 1.2 parecem-se com ECDHE-RSA-AES256-GCM-SHA384 e vão para tls-cipher, que aceita uma cadeia de cifra OpenSSL. As suítes TLS 1.3 chamam-se TLS_AES_256_GCM_SHA384 e vão para tls-ciphersuites; acrescentar uma à cadeia 1.2 não configura a lista 1.3, e o analisador pode aceitar o texto sem nunca o emparelhar. Um filtro correto para uma versão não diz nada sobre a outra. Anote para que versão é cada lista.

openvpn --show-tls imprime o que a compilação local suporta, e isso é um inventário, não uma promessa: o par remoto pode não permitir essas suítes, e o perfil ativo pode não as ativar. Use-o para excluir uma compilação que não pode oferecer suíte nenhuma e depois compare as listas configuradas.

Prove a negociação numa ligação nova

Um aperto de mão bem-sucedido é a única prova que conta, e tem de vir do cliente real com o perfil real. Aumente a verbosidade do servidor, ligue-se uma vez e leia do registo a versão de protocolo e a suíte negociadas em vez de assumir que o primeiro valor oferecido ganhou. Confirme depois o canal de dados à parte com tráfego pelo túnel, porque um aperto de mão que funciona e um canal de dados que falha são reparações diferentes. Repita após qualquer alteração de configuração, porque um perfil de cliente desatualizado é um falso negativo comum.

Se não existir uma configuração comum aprovada, a resposta é uma atualização ou um plano de migração, não uma política enfraquecida. Baixar tls-version-min, desativar a verificação ou ativar todas as suítes antigas elimina a rejeição sem cumprir o requisito de segurança que a produziu.

Anote a versão negociada, a suíte e a cifra de dados no ticket de alteração. A próxima pessoa a encontrar um erro TLS começará por esse registo e não por uma cadeia de cifra encontrada num comentário de fórum.

Artigos relacionados