Como verificar a pegada dun certificado VPN por unha canle separada
Unha pegada só demostra identidade cando o valor esperado chega por unha canle que o atacante non controla. Execute a comprobación nesta orde.
Unha pegada vale tanto coma a canle que lle dixo que agardar. Se o valor co que compara chegou pola mesma conexión que está a probar, a comparación non demostra nada máis alá de que quen controla esa conexión é coherente. A comprobación debe seguir unha orde fixa, e un paso fallido debería detelo en lugar de empurralo ao seguinte. Esta é a orde que uso cando un cliente VPN informa de que un certificado cambiou.
Nomee o obxecto antes de nomear o valor
Decida se o valor esperado pertence ao certificado folla do servidor, á CA emisora ou á clave pública dentro da folla. Son tres comprobacións distintas e fallan de maneiras distintas. Unha pegada de CA que coincide non fixa o servidor, e un hash da clave pública sobrevive deliberadamente a unha reemisión que conserva a mesma clave.
Anote tamén o algoritmo. SHA-256 é a expectativa normal hoxe, pero as ferramentas antigas imprimían SHA-1 salvo que pedise outra cousa, e un valor hexadecimal de 40 caracteres é sinal de que está a piques de comparar dúas cousas distintas.
Obteña o valor esperado por unha segunda canle
A segunda canle debe ser unha na que a parte contra a que se protexe non poida escribir. Un sistema de aprovisionamento co que xa se autentica, un rexistro impreso nunha caixa forte, unha base de datos de configuración ou un documento asinado entregado por outro proceso cumpren todos. Unha mensaxe de chat dun colega, unha páxina de asistencia alcanzada por un resultado de busca e calquera cousa pegada na terminal na que xa está depurando non cumpren.
Pida o valor completo e o algoritmo, nunca un prefixo. Os dous puntos e as maiúsculas ou minúsculas non importan, pero o truncamento converte unha comprobación de 256 bits nun xogo de adiviñas.
Se ninguén pode producir o valor esperado desde unha fonte independente, o resultado honesto é que este certificado hoxe non se pode verificar. Dicilo é mellor que fixar o que o cliente acaba de mostrar, o que converte un aviso nun costume.
Extraia o valor do seu lado
Para un ficheiro de certificado, a orde é openssl x509 -in server.crt -noout -fingerprint -sha256. O resumo explícito importa: sen el, a saída depende da súa versión de OpenSSL. O resultado é unha cadea hexadecimal separada por dous puntos, así que quite os dous puntos e pase ambos os lados a minúsculas antes de comparar.
Para un extremo que fala TLS directamente, concéctese e canalice o certificado cara a fóra: openssl s_client -connect vpn.example.com:443 -servername vpn.example.com < /dev/null | openssl x509 -noout -fingerprint -sha256. Funciona para un panel de administración web ou un oínte TLS, non para OpenVPN, cuxa canle de control está dentro do túnel. Para OpenVPN, lea o certificado do perfil no disco en lugar de tentar capturalo desde o socket.
A comparación debería ser mecánica. Normalice ambos os valores con tr -d ':' e unha conversión a minúsculas, e despois compare a cadea enteira. Facelo a ollo é como un prefixo coincidente agocha unha discrepancia no último byte. Se as cadeas difiren, trate a diferenza como real antes de buscar unha explicación.
Condicións de parada
Pare se o obxecto difire, porque unha pegada de CA non pode absolver un certificado folla nin unha folla pode absolver a CA. Pare se o algoritmo difire, porque un valor SHA-1 comparado cun valor SHA-256 non lle di nada. Pare se a pegada coincide pero o certificado está caducado, revogado ou emitido para outro nome; un hash coincidente non é unha comprobación de validez e non repara unha cadea rota. Pare tamén se o número de serie non coincide co número de serie do rexistro co que comproba, porque é a forma máis barata de detectar un certificado substituído.
Pare se o novo valor chegou pola canle que estaba probando. A rotación pode cambiar lexitimamente unha pegada, pero o valor de substitución debe vir do proceso de confianza, non do diálogo de aviso que provocou a pregunta.
Pare se a corrección suxerida é desactivar a verificación do nome de host ou da cadea. Unha pegada engade unha restrición ás comprobacións normais; non as substitúe salvo que o despregamento escollese deliberadamente un modelo só de pin, e esa escolla leva os seus propios custos operativos.
Despois da comparación
Anote que comparou, de onde viña o valor esperado e cando. Se o certificado se reemitiu, actualice a expectativa gardada pola mesma canle de confianza e anote o novo número de serie, porque é o número de serie o que fai auditable a seguinte rotación.
Despois sexa claro sobre os límites. Unha pegada confirma que o certificado que ten é o que alguén lle dixo que agardase. Non di nada sobre se o host está comprometido, nin sobre se o servizo rexistra ou restrinxe a que pode chegar ese certificado.