Un error de «ningún cifrado compartido» suena a un solo ajuste que hay que cambiar, y el ajuste que cambia la mayoría es el equivocado. OpenVPN mantiene políticas separadas para el canal de control que hace el saludo TLS y para el canal de datos que transporta paquetes dentro del túnel, y el error nombra el primero mientras la gente edita el segundo. Comparar lo que permite cada extremo, en el orden correcto, convierte las conjeturas en dos o tres decisiones: versión, luego lista de suites, luego credenciales.

Equivoca ese orden y puedes perder una hora añadiendo un nombre AES a una lista que nunca se consultó.

Dos listas de cifrado, y solo una rompe el saludo

El canal de control negocia una sesión TLS, y su política se escribe con tls-cipher para TLS 1.2 y tls-ciphersuites para TLS 1.3. El canal de datos se configura aparte con data-ciphers, donde una discrepancia produce una conexión que se establece y luego no puede pasar tráfico. Ambos producen errores que mencionan cifrados, y por eso se confunden. Un saludo que nunca se completa apunta al canal de control, mientras que un túnel establecido que descarta paquetes apunta al canal de datos.

Lee el mensaje completo en lugar de la primera línea. Una discrepancia de versiones, una suite ausente, un algoritmo de firma de certificado que el extremo rechaza y un fallo de verificación del nombre de host terminan todos en un error TLS, y solo uno de ellos trata de tu lista de suites. Separar esas categorías es la mayor parte del diagnóstico.

Compara las versiones antes de comparar las suites

Un extremo limitado a TLS 1.2 y un extremo que exige 1.3 no comparten versión, y ninguna cadena de cifrado salva eso. Anota tls-version-min y tls-version-max en ambos lados, o los valores predeterminados de las compilaciones en uso, porque la política OpenSSL de una distribución puede subir el mínimo sin que ninguna opción de OpenVPN lo diga. Si un lado es un dispositivo o un cliente de terceros, su ventana es lo que permite su firmware. Solo cuando las ventanas se solapan significa algo una comparación de suites.

Esos registros también deberían nombrar los binarios reales. Un openvpn de línea de comandos en tu portátil no es necesariamente el cliente que gestiona un perfil importado.

Las listas de TLS 1.2 y TLS 1.3 no se mezclan

Los nombres de suite de TLS 1.2 se parecen a ECDHE-RSA-AES256-GCM-SHA384 y van en tls-cipher, que acepta una cadena de cifrado OpenSSL. Las suites de TLS 1.3 se llaman como TLS_AES_256_GCM_SHA384 y van en tls-ciphersuites; añadir una a la cadena de 1.2 no configura la lista de 1.3, y el analizador puede aceptar el texto sin llegar a coincidir nunca. Un filtro correcto para una versión no dice nada de la otra. Anota para qué versión es cada lista.

openvpn --show-tls imprime lo que admite la compilación local, y eso es un inventario, no una promesa: el extremo remoto puede no permitir esas suites, y el perfil activo puede no habilitarlas. Úsalo para descartar una compilación que no puede ofrecer ninguna suite y después compara las listas configuradas.

Demuestra la negociación en una conexión nueva

Un saludo correcto es la única prueba que cuenta, y tiene que venir del cliente real con el perfil real. Sube la verbosidad del servidor, conéctate una vez y lee del registro la versión de protocolo y la suite negociadas en lugar de suponer que ganó el primer valor ofrecido. Después confirma el canal de datos por separado con tráfico por el túnel, porque un saludo que funciona y un canal de datos que falla son reparaciones distintas. Repítelo tras cualquier cambio de configuración, porque un perfil de cliente obsoleto es un falso negativo habitual.

Si no existe una configuración común aprobada, la respuesta es una actualización o un plan de migración, no una política debilitada. Bajar tls-version-min, desactivar la verificación o habilitar todas las suites antiguas elimina el rechazo sin cumplir el requisito de seguridad que lo produjo.

Anota la versión negociada, la suite y el cifrado de datos en el tique de cambio. La siguiente persona que se encuentre con un error TLS empezará por ese registro y no por una cadena de cifrado encontrada en un mensaje de foro.

Artículos relacionados