Aller au contenu
ecdsa.com
Go crypto/x509Go

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

Comment corriger l’erreur

  1. 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. 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

Erreurs associées

Parcourir toute la base de données des erreurs de signature