La compilation Go, l’installation Composer et le client Python fonctionnent tous à la maison et échouent tous à l’intérieur du VPN de l’entreprise. Ce schéma vous parle du chemin, pas de l’application. Quelque chose sur le tunnel a changé la chaîne de certificats que voit votre processus, ou a réinitialisé la poignée de main avant même qu’une chaîne n’arrive. Les deux pannes se ressemblent dans un terminal et exigent des réponses complètement différentes.

Trois messages, trois mécanismes

L’erreur x509 certificate signed by unknown authority signifie qu’une chaîne a été construite et que sa racine manque dans le magasin de confiance que ce processus utilise. L’erreur self-signed certificate in certificate chain signifie généralement qu’un proxy d’inspection a répondu avec son propre certificat, ce qui est une chaîne que votre environnement d’exécution ne reconnaît pas. Un SSL EOF pendant la poignée de main signifie que la connexion a été fermée avant qu’un certificat utilisable ne soit envoyé, et c’est un dispositif intermédiaire qui rejette le ClientHello, pas du tout un problème de confiance.

Ajouter une option d’insécurité fait disparaître les trois messages tout en laissant l’interception en place, et cela supprime la vérification qui attraperait un véritable attaquant.

Trouvez le paquet que le processus lit réellement

La racine d’entreprise installée dans le magasin Windows corrige les navigateurs et les applications .NET qui consultent le magasin système. Elle ne fait rien pour une compilation exécutée dans un conteneur, qui porte son propre paquet de CA, ni pour un processus Python qui utilise certifi ou un processus Node qui utilise sa liste intégrée. Go lit le pool système de l’environnement dans lequel le binaire s’exécute, c’est-à-dire le conteneur, pas le portable. Une même machine produit donc à la fois un navigateur qui fonctionne et un outil de compilation qui échoue.

Interrogez l’outil au lieu de supposer. python3 -c "import ssl; print(ssl.get_default_verify_paths())" affiche les fichiers que Python consultera, et node -e "console.log(process.env.NODE_EXTRA_CA_CERTS)" indique si un remplacement est déjà défini. Pour un conteneur, exécutez la même vérification dans l’image, car c’est l’environnement que la compilation utilise réellement.

Installez une racine là où la compilation s’exécute

Obtenez la racine d’inspection auprès de l’IT sous forme de fichier PEM et vérifiez son empreinte par un canal séparé avant de lui faire confiance. Sur les images dérivées de Debian, copiez-la dans /usr/local/share/ca-certificates/ et exécutez update-ca-certificates ; les images de la famille RHEL utilisent update-ca-trust après avoir déposé le fichier dans /etc/pki/ca-trust/source/anchors/. Dans une compilation de conteneur, ajoutez ces étapes avant la commande qui échoue pour que la couche soit mise en cache au-dessus de l’installation des dépendances.

Pour un devcontainer local, montez le PEM et exécutez la même commande de mise à jour au démarrage au lieu de la cuire dans une image personnelle que personne d’autre ne peut reproduire. Les outils qui embarquent leur propre paquet ont besoin de leur propre remplacement documenté : pip a un réglage de certificat, npm a un réglage cafile, et la plupart des autres acceptent les variables d’environnement standard.

Ce n’est pas la même chose que d’accepter n’importe quel certificat. Vous ajoutez une racine précise, obtenue auprès de la partie qui fait l’inspection, à un environnement, et la vérification reste active pour toute autre chaîne. Notez quel fichier a été ajouté et quand il expire, car une racine d’inspection se renouvelle comme n’importe quelle autre CA.

Quand la poignée de main meurt avant un certificat

Si rien n’est présenté, aucun changement de magasin de confiance n’aidera. Comparez la même requête avec le tunnel actif puis coupé, et inspectez ensuite la chaîne directement avec openssl s_client -connect host:443 -servername host -showcerts. Une connexion qui aboutit hors du VPN et se réinitialise à l’intérieur est une décision de politique prise par le dispositif intermédiaire, et le remède est une exception pour cet hôte, pas un autre certificat. Demandez que le registre de paquets ou le point de terminaison de l’API passe sans modification.

Fractionner le tunnel pour que l’outil contourne le VPN évite l’inspection de ce trafic, ce qui peut violer la politique et ne rend pas l’outil digne de confiance.

Notez le résultat pour chaque outil

Une note courte énumérant le binaire, le fichier de confiance qu’il lit, la variable d’environnement en jeu et l’exception approuvée épargne à la personne suivante tout le diagnostic. Tenez la note par outil plutôt que par portable, car le portable est rarement ce qui a changé.

Et gardez deux phrases distinctes dans le ticket : nous avons installé une racine d’entreprise précise, et nous avons désactivé la vérification. Une seule des deux est une action de support.

Articles similaires