Echecs mTLS Envoy avec CRYPTOLIB_invalid_signature en rotation de certifs

benoit-evrard 03/04/2026
RÉSOLU

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

03/04/2026 à 13:39

16 commentaires

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

05/04/2026 à 15:45

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
06/04/2026 à 21:53
oallain
Membre
Avatar de oallain
oallain
Membre

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é

08/04/2026 à 02:03

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

11/04/2026 à 01:13

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
13/04/2026 à 17:47
oallain
Membre
Avatar de oallain
oallain
Membre

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

15/04/2026 à 12:25

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

17/04/2026 à 19:43

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

19/04/2026 à 06:06
oallain
Membre
Avatar de oallain
oallain
Membre

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

21/04/2026 à 14:47

voici le bout de code incriminé

{{ with secret "pki/issue/my-role" "common_name=my-service" }}
{{ .Data.certificate }}
{{ end }}
24/04/2026 à 09:45

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

26/04/2026 à 13:30
oallain
Membre
Avatar de oallain
oallain
Membre

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

29/04/2026 à 11:18

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

{{ .Data.certificate }}
{{ .Data.issuing_ca }}
01/05/2026 à 15:44

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

02/05/2026 à 15:48
oallain
Membre
Avatar de oallain
oallain
Membre

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

04/05/2026 à 02:19

ç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

06/05/2026 à 12:17

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