Comment vérifier l’empreinte d’un certificat VPN par un canal séparé
Une empreinte ne prouve une identité que lorsque la valeur attendue arrive par un canal que l’attaquant ne contrôle pas. Déroulez la vérification dans cet ordre.
Une empreinte vaut ce que vaut le canal qui vous a dit quoi attendre. Si la valeur à laquelle vous comparez est arrivée par la même connexion que celle que vous testez, la comparaison ne prouve rien de plus que le fait que celui qui contrôle cette connexion est cohérent. La vérification doit suivre un ordre fixe, et une étape échouée doit vous arrêter au lieu de vous pousser vers la suivante. Voici l’ordre que j’utilise lorsqu’un client VPN signale qu’un certificat a changé.
Nommez l’objet avant de nommer la valeur
Décidez si la valeur attendue appartient au certificat feuille du serveur, à l’autorité de certification émettrice ou à la clé publique à l’intérieur de la feuille. Ce sont trois vérifications différentes, et elles échouent de manières différentes. Une empreinte d’autorité qui correspond ne fixe pas le serveur, et un hachage de clé publique survit délibérément à une réémission qui conserve la même clé.
Notez aussi l’algorithme. SHA-256 est l’attente normale aujourd’hui, mais les anciens outils affichaient SHA-1 sauf si vous demandiez autre chose, et une valeur hexadécimale de 40 caractères est le signe que vous êtes sur le point de comparer deux choses différentes.
Obtenez la valeur attendue par un second canal
Le second canal doit être un canal dans lequel la partie contre laquelle vous vous protégez ne peut pas écrire. Un système d’approvisionnement auquel vous vous authentifiez déjà, un enregistrement imprimé dans un coffre, une base de données de configuration ou un document signé livré par un autre processus conviennent tous. Un message de messagerie d’un collègue, une page d’assistance atteinte via un résultat de recherche et tout ce qui est collé dans le terminal où vous déboguez déjà ne conviennent pas.
Demandez la valeur complète et l’algorithme, jamais un préfixe. Les deux-points et la casse n’ont pas d’importance, mais la troncature transforme une vérification de 256 bits en jeu de devinettes.
Si personne ne peut produire la valeur attendue depuis une source indépendante, le résultat honnête est que ce certificat ne peut pas être vérifié aujourd’hui. Le dire vaut mieux que d’épingler ce que le client vient d’afficher, ce qui transforme un avertissement en habitude.
Extrayez la valeur de votre côté
Pour un fichier de certificat, la commande est openssl x509 -in server.crt -noout -fingerprint -sha256. Le condensat explicite compte : sans lui, la sortie dépend de votre version d’OpenSSL. Le résultat est une chaîne hexadécimale séparée par des deux-points, alors retirez les deux-points et passez les deux côtés en minuscules avant de comparer.
Pour un point de terminaison qui parle TLS directement, connectez-vous et faites sortir le certificat par un tube : openssl s_client -connect vpn.example.com:443 -servername vpn.example.com < /dev/null | openssl x509 -noout -fingerprint -sha256. Cela fonctionne pour un panneau d’administration web ou un écouteur TLS, pas pour OpenVPN, dont le canal de contrôle se trouve à l’intérieur du tunnel. Pour OpenVPN, lisez le certificat depuis le profil sur le disque au lieu d’essayer de le capturer depuis la socket.
La comparaison doit être mécanique. Normalisez les deux valeurs avec tr -d ':' et un passage en minuscules, puis comparez la chaîne entière. Le faire à l’œil est la façon dont un préfixe correspondant masque un écart dans le dernier octet. Si les chaînes diffèrent, traitez la différence comme réelle avant de chercher une explication.
Conditions d’arrêt
Arrêtez-vous si l’objet diffère, car une empreinte d’autorité ne peut pas blanchir un certificat feuille et une feuille ne peut pas blanchir l’autorité. Arrêtez-vous si l’algorithme diffère, car une valeur SHA-1 comparée à une valeur SHA-256 ne vous dit rien. Arrêtez-vous si l’empreinte correspond mais que le certificat est expiré, révoqué ou émis pour un autre nom ; un hachage correspondant n’est pas un contrôle de validité et ne répare pas une chaîne cassée. Arrêtez-vous aussi si le numéro de série ne correspond pas au numéro de série de l’enregistrement de référence, car c’est le moyen le moins coûteux de repérer un certificat substitué.
Arrêtez-vous si la nouvelle valeur est arrivée par le canal que vous testiez. Une rotation peut légitimement changer une empreinte, mais la valeur de remplacement doit tout de même venir du processus de confiance, pas de la boîte de dialogue d’avertissement qui a provoqué la question.
Arrêtez-vous si le correctif suggéré est de désactiver la vérification du nom d’hôte ou de la chaîne. Une empreinte ajoute une contrainte aux vérifications normales ; elle ne les remplace pas sauf si le déploiement a délibérément choisi un modèle d’épinglage seul, et ce choix porte ses propres coûts d’exploitation.
Après la comparaison
Consignez ce que vous avez comparé, d’où venait la valeur attendue et quand. Si le certificat a été réémis, mettez à jour l’attente enregistrée par le même canal de confiance et notez le nouveau numéro de série, car c’est le numéro de série qui rend la rotation suivante auditable.
Soyez ensuite clair sur les limites. Une empreinte confirme que le certificat que vous détenez est celui que quelqu’un vous a dit d’attendre. Elle ne dit rien sur le fait que l’hôte soit compromis, ni sur le fait que le service journalise ou restreigne ce que ce certificat peut atteindre.