Message d’erreur
x509: invalid signature: parent certificate cannot sign this kind of certificate
Également affiché sous la forme
- x509: certificate signed by unknown authority (possibly because of "x509: invalid signature: parent certificate cannot sign this kind of certificate" while trying to verify candidate authority certificate "Example Issuing Server")
Go l’enveloppe ainsi : « x509: certificate signed by unknown authority (possibly because of \"x509: invalid signature: parent certificate cannot sign this kind of certificate\" while trying to verify candidate authority certificate \"<issuer CN>\") ». Le nom de l’émetteur provient de votre chaîne.
Go crypto/x509 — ConstraintViolationError: the issuer is not a CA (basicConstraints CA:FALSE or missing keyCertSign)
Ce que cela signifie
Go a trouvé un émetteur candidat pour un certificat (nommé entre guillemets à la fin), mais cet émetteur n’est pas autorisé à signer des certificats : ses basicConstraints indiquent CA:FALSE (ou sont absentes), ou son keyUsage ne contient pas keyCertSign. Go l’écarte donc et, faute d’autre chemin, signale « certificate signed by unknown authority », en citant cette raison comme cause probable.
Pourquoi cela se produit
Certificats signés avec un certificat qui n’est pas celui d’une AC
fréquenteDes scripts de PKI maison qui signent des certificats serveur avec un autre certificat serveur, ou un « intermédiaire » créé avec le profil par défaut (non-AC).
Un certificat d’AC sans keyCertSign
occasionnelleUn certificat intermédiaire avec keyUsage = digitalSignature uniquement (keyCertSign absent) ne peut pas émettre de certificats aux yeux de Go.
Un certificat non-AC dans le fichier de chaîne
occasionnelleUn fichier de chaîne qui contient un autre certificat feuille à la place du certificat intermédiaire amène Go à essayer ce certificat feuille comme émetteur.
Comment corriger l’erreur
- 1.
Vérifier les basicConstraints et le keyUsage de l’émetteur
Le candidat cité doit comporter CA:TRUE et keyCertSign. OpenSSL 3.5 signale le même défaut sous la forme de l’erreur 79, « invalid CA certificate ».
bash # Every issuing certificate needs CA:TRUE (and keyCertSign if keyUsage is present) openssl x509 -in intermediate.pem -noout -subject -ext basicConstraints,keyUsage openssl verify -CAfile root.pem -untrusted intermediate.pem server.pem # OpenSSL 3.5: error 79, invalid CA certificate - 2.
Réémettre le certificat intermédiaire comme AC
Signez-le avec basicConstraints critical CA:TRUE (avec un pathlen adapté) et keyUsage keyCertSign, cRLSign, puis réémettez les certificats feuilles ou reconstruisez leur chaîne.
bash # Issue the intermediate as a real CA printf 'basicConstraints=critical,CA:TRUE,pathlen:0\nkeyUsage=critical,keyCertSign,cRLSign\n' > ca.ext openssl x509 -req -in int.csr -CA root.pem -CAkey root.key -days 1825 -extfile ca.ext -out int.pem