Echecs mTLS Envoy avec CRYPTOLIB_invalid_signature en rotation de certifs

Posté par benoit-evrard le 03/04/2026
RÉSOLU

benoit-evrard

Membre depuis le 25/03/2025

gros souci sur notre mesh istio dès qu'on a une rotation de certificats via vault les sidecars se mettent à rejeter les connexions avec une erreur cryptolib mystérieuse

le pire c'est que ça ne touche que certains services de manière aléatoire et les logs envoy sont pas très causants sur l'origine du mauvais flag

Commentaires

alexandre-besson

Membre depuis le 02/01/2025

ton erreur sent le mismatch entre la clé privée et le certificat qui sont streamés par sds vers envoy

benoit-evrard

Membre depuis le 25/03/2025

j'ai dump la config de l'endpoint qui fail et tout a l'air cohérent au niveau du hash

istioctl pc secret my-pod-name -o json

oallain

Membre depuis le 27/06/2024

vérifie la chaîne intermédiaire dans ton bundle vault si il manque un cran dans la hiérarchie envoy peut pas valider la signature de l'autre côté

alexandre-besson

Membre depuis le 02/01/2025

lance un openssl s_client sur le port du sidecar pour voir ce qu'il présente réellement pendant le handshake

benoit-evrard

Membre depuis le 25/03/2025

j'ai fait le test et voilà le résultat ça pique les yeux

depth=0 CN = my-service.default.svc.cluster.local
verify error:num=20:unable to get local issuer certificate

oallain

Membre depuis le 27/06/2024

c'est ce que je craignais ton agent de rotation n'envoie que le leaf certificate sans la chaîne complète

alexandre-besson

Membre depuis le 02/01/2025

tu utilises quelle version du vault-agent-injector parce que les vieilles versions géraient mal le bundle fullchain

benoit-evrard

Membre depuis le 25/03/2025

on est en 0.25.0 et on utilise le template standard pour injecter les certifs dans les volumes partagés

oallain

Membre depuis le 27/06/2024

montre ton template vault pour voir comment tu récupères les données de l'api

benoit-evrard

Membre depuis le 25/03/2025

voici le bout de code incriminé

{{ with secret "pki/issue/my-role" "common_name=my-service" }}
{{ .Data.certificate }}
{{ end }}

alexandre-besson

Membre depuis le 02/01/2025

tu récupères juste .Data.certificate donc tu n'as pas l'intermediate ca c'est pour ça que la validation mtls explose

oallain

Membre depuis le 27/06/2024

il faut utiliser .Data.issuing_ca ou alors concaténer les deux pour avoir la full chain exploitable par envoy

benoit-evrard

Membre depuis le 25/03/2025

si je concatène comme ça ça devrait suffire non

{{ .Data.certificate }}
{{ .Data.issuing_ca }}

alexandre-besson

Membre depuis le 02/01/2025

oui exactement mais fais attention à l'ordre sinon la lib ssl va encore râler sur le format du pem

oallain

Membre depuis le 27/06/2024

test direct en redémarrant un pod après avoir mis à jour ta configmap de template vault et vérifie avec istioctl proxy-status

benoit-evrard

Membre depuis le 25/03/2025

ça fonctionne enfin les handshakes passent tous et l'erreur a disparu des logs envoy

merci les gars je vais aller corriger tous nos templates avant que la prochaine rotation globale ne casse tout le reste

Laisser une réponse

Vous devez être connecté pour poster un message !

Rejoindre la communauté

Recevoir les derniers articles gratuitement en créant un compte !

S'inscrire