Compare dos perfiles OpenVPN sin filtrar claves
Un diff de texto puede exponer las claves incrustadas con la misma facilidad con que muestra una directiva cambiada. Compare por rol en copias protegidas y luego redacte un archivo de diagnóstico aparte.
Dos perfiles, uno conecta y el otro no, y la forma rápida de ver por qué es un diff. El problema es que el mismo diff imprime la clave privada incrustada, la clave estática y cualquier bloque de credenciales que lleve el archivo, y la gente pega la salida en un chat antes de darse cuenta. Decidir qué está comparando va antes de ejecutar el comando. Compare estructura y roles en copias protegidas, y construya un archivo redactado aparte cuando otra persona necesite verlo.
Qué lleva realmente un archivo .ovpn
Un archivo .ovpn es una configuración con bloques incrustados opcionales. Puede contener un certificado CA, un certificado de cliente, una clave privada, una clave tls-auth o tls-crypt, y directivas que apuntan a archivos externos o piden credenciales. Dos archivos pueden parecer casi idénticos y diferir solo dentro de un bloque, o en una directiva que cambia el transporte por completo. El número de líneas no le dice nada sobre cuál de esas cosas ocurrió.
Una diferencia dentro de un bloque de clave no es prueba pública de nada. Un certificado reemitido y uno con clave renovada pueden producir la misma forma de cambio, así que el desajuste del bloque dice que el material es distinto, no qué decisión lo produjo. Trátelo como una señal para comparar campos, no como un hallazgo.
Compare por rol, no por línea
Siga el orden propio de la conexión: primero el extremo y el transporte, luego la confianza y la identidad esperada, luego la autenticación de usuario, luego las rutas, DNS y los ganchos de script. Esa secuencia coincide con lo que hace el cliente, así que la primera diferencia que encuentre es lo primero que pudo haber roto la conexión. Comparar por orden alfabético, en cambio, dispersa los ajustes relacionados por toda la salida.
Una pasada consciente de los campos mira estos elementos, en ese orden. Todo lo que el cliente pide de forma interactiva pertenece a la fila de autenticación y no a las filas de confianza.
remote,protoy puerto, incluido cada bloque de conexión.caycert: emisor, sujeto y fecha de caducidad.- Si existe una clave privada, nunca qué contiene.
tls-authotls-cryptpresencia y dirección de la clave.- Directivas de autenticación, incluida cualquier referencia a un archivo de credenciales.
- Rutas, opciones de DNS y ganchos de script que se ejecutan al conectar.
Cuando un archivo contiene varios bloques de conexión, mantenga cada opción con su extremo. Comparar solo la primera línea remote puede pasar por alto la alternativa que el cliente elige realmente en esta red.
Por qué un diff simple es la herramienta equivocada
Un diff simple está hecho para texto, no para secretos. Imprimirá encantado una clave privada en el historial de la pantalla, y no le dirá que la directiva que mira no tiene nada que ver con el fallo. Las extracciones de campos son a la vez más seguras y más legibles, porque el material del certificado se puede comparar como metadatos en lugar 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
Los dos primeros comandos imprimen identidad y validez sin tocar la clave, así que su salida es segura de pegar. El grep imprime nombres y valores de directivas pero nunca los cuerpos de los bloques, lo que lo convierte en la primera pasada correcta cuando sospecha una diferencia de transporte o de enrutamiento. Si hay que comparar un bloque, compare su hash en lugar del contenido.
Construya una copia redactada para el ticket
Elimine los secretos reales y los identificadores innecesarios manteniendo los nombres de los campos y suficiente estructura para explicar la diferencia. Un marcador de la misma forma sigue revelando dónde está el material y cuánto medía, así que decida si incluso eso es aceptable. Revise el propio adjunto final en lugar de confiar en el comando que recuerda haber ejecutado. No edite el original de trabajo solo para producir un ejemplo, porque un perfil redactado no es necesariamente ejecutable y nunca debe reimportarse.
Mantenga los originales identificables por nombre de archivo y hash en lugar de copiarlos en tres directorios con nombres parecidos. Una cadena de hash basta para demostrar qué archivo se revisó y no cuesta nada si se filtra. Pode las copias cuando se cierre el cambio, para que la siguiente persona herede un único archivo autoritativo.
Mantenga la comparación atada a un fallo
Una comparación vale su coste cuando responde una pregunta sobre una importación o un fallo de conexión. Nombre primero el paso que falla y luego compare solo los campos de los que depende ese paso; reunir todas las credenciales del cliente en un solo directorio hace más probable la siguiente filtración y más lento el siguiente diagnóstico. Cuanto más estrecha la pregunta, más corta la lista de campos que pueden responderla.
Si un archivo nuevo vino del operador, confirme su vía de distribución antes de reemplazar material de confianza. Después del cambio, inspeccione la copia importada que el cliente eligió realmente y el resultado negociado, porque otra versión del cliente puede ignorar una directiva o leerla de forma distinta. El archivo en disco no es prueba de la conexión que se ejecutó. La semántica de las directivas está en el manual de OpenVPN 2.6.