¿Archivo DH o clave tls-auth? Distinguir dos archivos de OpenVPN
Un archivo contiene parámetros públicos de grupo, el otro es material secreto compartido. Tres condiciones deciden a qué directiva pertenece cada uno.
Dos archivos, dos directivas y la costumbre de nombrar ambos por lo que configuran. Así es como dh.pem acaba en una línea tls-auth y el cliente falla con un mensaje sobre un formato de clave inesperado. La decisión que tienes delante no es qué archivo es más fuerte. Es qué papel necesita realmente el despliegue, y tres condiciones lo resuelven: qué intercambio de claves negociará tu pila TLS, si quieres autenticación del canal de control o no, y si el material debe permanecer en secreto.
Responde esas por orden y la pregunta del archivo se responde sola. Si las omites, los nombres de las directivas empiezan a parecer intercambiables, que es exactamente el estado del que surge el error.
Lee la etiqueta antes del nombre del archivo
La primera línea del archivo informa más que su nombre, porque un nombre es una convención humana y la etiqueta la produce la herramienta. Los parámetros de Diffie-Hellman llevan una etiqueta PEM BEGIN DH PARAMETERS. Una clave estática de OpenVPN es una estructura completamente distinta, con su propia cabecera y su carga hexadecimal.
Renombrar no convierte nada. Un archivo de parámetros llamado ta.key sigue siendo parámetros, y una clave estática llamada dh.pem sigue siendo una clave estática; el analizador lee el contenido y rechaza la discrepancia. Compruébalo antes de editar el perfil:
head -n 1 dh.pem
head -n 1 ta.keyTres condiciones que deciden qué archivo necesitas
La primera condición es el intercambio. Un handshake Diffie-Hellman de campo finito necesita un grupo, y la directiva dh es donde el servidor nombra los parámetros para él. Un handshake de curva elíptica no necesita ese archivo en absoluto, porque la curva es el conjunto de parámetros. Si tu servidor solo negocia conjuntos ECDHE, un archivo DH es peso muerto en lugar de fuerza adicional.
La segunda condición es la autenticación del canal de control, una función aparte con su propio material. Un archivo tls-auth es una clave estática compartida que ambos pares tienen, usada para firmar paquetes del canal de control para que un par no autenticado ni siquiera pueda completar el handshake. Existe tanto si usas DH de campo finito como si no, y no tiene nada que ver con los parámetros del grupo.
La tercera condición es el secreto y la distribución. Los parámetros DH pueden publicarse sin debilitar la sesión, porque los valores secretos se generan por handshake y nunca salen de los pares. Una clave estática no debe publicarse: son los mismos bytes en ambos extremos, no rota por sí sola y quien la tenga puede producir firmas válidas del canal de control. Esas dos respuestas apuntan a reglas de trato completamente distintas, y por eso un archivo puede estar en un repositorio y el otro no.
Genera el material correcto para cada papel
Usa la herramienta que produce el formato que la directiva espera en lugar de convertir entre ellas. Para la clave compartida en OpenVPN 2.6, la forma tipada del generador declara el propósito explícitamente.
openvpn --genkey tls-auth ta.keyEse comando crea material secreto nuevo; no repara ni inspecciona una clave existente, y ejecutarlo de nuevo te da una clave distinta que los otros pares no tienen. Copia el archivo resultante a los pares que lo necesitan por un canal que usarías para cualquier secreto compartido, y mantén la convención de dirección coherente: con tls-auth, un lado usa key-direction 0 y el otro key-direction 1.
Los parámetros DH, cuando los necesitas, vienen de la generación de parámetros y no de un generador de claves, y su procedencia importa aunque la salida sea pública. Un grupo extraído de una fuente desconocida no se vuelve fiable por ser público; todavía tiene que ser un grupo con el que tus pares estén de acuerdo y que no quede debilitado por su tamaño o construcción.
Qué hace dh none y qué no hace
dh none es una directiva real con un significado estrecho: no se cargará ningún archivo de parámetros de campo finito, porque el handshake usa Diffie-Hellman de curva elíptica. No es una abreviatura de «saltarse el paso DH» en el sentido de debilitar nada, y desde luego no le dice a OpenVPN que acepte otro archivo como sustituto.
De leerla mal se siguen dos errores. El primero es suponer que dh none elimina la necesidad de tls-auth, cuando las dos controlan cosas distintas. El segundo es mantener una línea dh obsoleta junto a una configuración solo de curva y luego preguntarse qué archivo usa realmente el servidor; si la directiva está presente, el archivo se lee, y una ruta rota ahí hace fallar el arranque por un motivo sin relación con el intercambio que se negociará.
Si el archivo equivocado ya está desplegado
Restaura el secreto previsto del propietario del perfil y no toques la verificación del certificado mientras lo haces. El fallo es una discrepancia de formato, no un fallo de confianza, y desactivar la verificación para sortear el error sustituye un problema de arranque por uno silencioso.
Luego separa los dos incidentes que la gente tiende a fusionar. Publicar un archivo de parámetros DH es casi inocuo, porque los parámetros eran públicos por diseño. Exponer la clave tls-auth es otro suceso: la clave autentica paquetes del canal de control para cada par que la tiene, así que la sustitución debe coordinarse en todo el despliegue y no aplicarse a un solo host.
Una comprobación de cinco minutos resuelve en qué caso estás: lee la primera línea de cada archivo, confirma la directiva que lo referencia y confirma que la distribución del archivo coincide con lo que exige el material. Es un trabajo menor que regenerar una PKI funcional, y es el que las tres condiciones señalaban todo el tiempo.