Fehlermeldung
x509: invalid signature: parent certificate cannot sign this kind of certificate
Auch ausgegeben als
- 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 verpackt den Fehler als „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>\")“. Der Name des Ausstellers stammt aus deiner Kette.
Go crypto/x509 — ConstraintViolationError: the issuer is not a CA (basicConstraints CA:FALSE or missing keyCertSign)
Was der Fehler bedeutet
Go hat für ein Zertifikat einen möglichen Aussteller gefunden (am Ende in Anführungszeichen genannt), aber dieser Aussteller darf keine Zertifikate signieren: Seine basicConstraints lauten CA:FALSE (oder fehlen), oder seiner keyUsage fehlt keyCertSign. Go verwirft ihn deshalb und meldet, da es keinen anderen Pfad gibt, „certificate signed by unknown authority“ mit diesem Grund als wahrscheinlicher Ursache.
Warum der Fehler auftritt
Mit einem Nicht-CA-Zertifikat signierte Zertifikate
häufigSelbst gebaute PKI-Skripte, die Serverzertifikate mit einem anderen Serverzertifikat signieren, oder ein „Zwischenzertifikat“, das mit dem Standardprofil (ohne CA) erstellt wurde.
Ein CA-Zertifikat ohne keyCertSign
gelegentlichEin Zwischenzertifikat mit keyUsage = digitalSignature allein (keyCertSign fehlt) kann aus Sicht von Go keine Zertifikate ausstellen.
Ein Nicht-CA-Zertifikat im Ketten-Bundle
gelegentlichEin Bundle, das an der Stelle des Zwischenzertifikats ein weiteres Leaf-Zertifikat enthält, bringt Go dazu, dieses Leaf-Zertifikat als Aussteller auszuprobieren.
So behebst du den Fehler
- 1.
basicConstraints und keyUsage des Ausstellers prüfen
Der in Anführungszeichen genannte Kandidat muss CA:TRUE und keyCertSign haben. OpenSSL 3.5 meldet denselben Mangel als Fehler 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.
Zwischenzertifikat als CA neu ausstellen
Signiere es mit basicConstraints critical CA:TRUE (pathlen nach Bedarf) und keyUsage keyCertSign, cRLSign, und stelle dann die Leaf-Zertifikate neu aus oder verkette sie neu.
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