Cómo verificar la huella de un certificado VPN por un canal separado
Una huella solo demuestra identidad cuando el valor esperado llega por un canal que el atacante no controla. Ejecute la comprobación en este orden.
Una huella vale tanto como el canal que le dijo qué esperar. Si el valor con el que compara llegó por la misma conexión que está probando, la comparación no demuestra nada más allá de que quien controla esa conexión es coherente. La comprobación debe seguir un orden fijo, y un paso fallido debería detenerle en lugar de empujarle al siguiente. Este es el orden que uso cuando un cliente VPN informa de que un certificado ha cambiado.
Nombre el objeto antes de nombrar el valor
Decida si el valor esperado pertenece al certificado hoja del servidor, a la CA emisora o a la clave pública dentro de la hoja. Son tres comprobaciones distintas y fallan de maneras distintas. Una huella de CA que coincide no fija el servidor, y un hash de la clave pública sobrevive deliberadamente a una reemisión que conserva la misma clave.
Anote también el algoritmo. SHA-256 es la expectativa normal hoy, pero las herramientas antiguas imprimían SHA-1 salvo que pidiera otra cosa, y un valor hexadecimal de 40 caracteres es señal de que está a punto de comparar dos cosas distintas.
Obtenga el valor esperado por un segundo canal
El segundo canal debe ser uno en el que la parte contra la que se protege no pueda escribir. Un sistema de aprovisionamiento con el que ya se autentica, un registro impreso en una caja fuerte, una base de datos de configuración o un documento firmado entregado por otro proceso cumplen todos. Un mensaje de chat de un colega, una página de soporte alcanzada por un resultado de búsqueda y cualquier cosa pegada en la terminal en la que ya está depurando no cumplen.
Pida el valor completo y el algoritmo, nunca un prefijo. Los dos puntos y las mayúsculas o minúsculas no importan, pero el truncamiento convierte una comprobación de 256 bits en un juego de adivinanzas.
Si nadie puede producir el valor esperado desde una fuente independiente, el resultado honesto es que este certificado hoy no se puede verificar. Decirlo es mejor que fijar lo que el cliente acaba de mostrar, lo que convierte una advertencia en una costumbre.
Extraiga el valor de su lado
Para un archivo de certificado, la orden es openssl x509 -in server.crt -noout -fingerprint -sha256. El digest explícito importa: sin él, la salida depende de su versión de OpenSSL. El resultado es una cadena hexadecimal separada por dos puntos, así que quite los dos puntos y pase ambos lados a minúsculas antes de comparar.
Para un extremo que habla TLS directamente, conéctese y canalice el certificado hacia fuera: openssl s_client -connect vpn.example.com:443 -servername vpn.example.com < /dev/null | openssl x509 -noout -fingerprint -sha256. Esto funciona para un panel de administración web o un oyente TLS, no para OpenVPN, cuyo canal de control está dentro del túnel. Para OpenVPN, lea el certificado del perfil en disco en lugar de intentar capturarlo del socket.
La comparación debería ser mecánica. Normalice ambos valores con tr -d ':' y una conversión a minúsculas, y luego compare la cadena entera. Hacerlo a ojo es como un prefijo coincidente oculta una discrepancia en el último byte. Si las cadenas difieren, trate la diferencia como real antes de buscar una explicación.
Condiciones de parada
Pare si el objeto difiere, porque una huella de CA no puede absolver un certificado hoja ni una hoja puede absolver a la CA. Pare si el algoritmo difiere, porque un valor SHA-1 comparado con un valor SHA-256 no le dice nada. Pare si la huella coincide pero el certificado está caducado, revocado o emitido para otro nombre; un hash coincidente no es una comprobación de validez y no repara una cadena rota. Pare también si el número de serie no coincide con el número de serie del registro con el que comprueba, porque es la forma más barata de detectar un certificado sustituido.
Pare si el nuevo valor llegó por el canal que estaba probando. La rotación puede cambiar legítimamente una huella, pero el valor de sustitución debe venir del proceso de confianza, no del diálogo de advertencia que provocó la pregunta.
Pare si la corrección sugerida es desactivar la verificación del nombre de host o de la cadena. Una huella añade una restricción a las comprobaciones normales; no las sustituye salvo que el despliegue haya elegido deliberadamente un modelo solo de pin, y esa elección conlleva sus propios costes operativos.
Después de la comparación
Anote qué comparó, de dónde venía el valor esperado y cuándo. Si el certificado se reemitió, actualice la expectativa guardada por el mismo canal de confianza y anote el nuevo número de serie, porque es el número de serie lo que hace auditable la siguiente rotación.
Después sea claro sobre los límites. Una huella confirma que el certificado que tiene es el que alguien le dijo que esperara. No dice nada sobre si el host está comprometido, ni sobre si el servicio registra o restringe a qué puede llegar ese certificado.