Zum Inhalt springen
ecdsa.com
Node.js cryptoNode.js crypto

Fehlermeldung

Invalid key object type public, expected private.

Die beiden Typnamen in der Meldung wechseln je nach Schlüssel und Operation: sign() mit einem geheimen Schlüssel meldet „Invalid key object type secret, expected private.“, verify() mit einem geheimen Schlüssel „Invalid key object type secret, expected private or public.“ Einen privaten Schlüssel akzeptiert verify() durchaus und prüft dann mit dessen öffentlicher Hälfte. Der Aufbau der Meldung bleibt gleich.

Node.js crypto — TypeError, code ERR_CRYPTO_INVALID_KEY_OBJECT_TYPE

Was der Fehler bedeutet

Du hast ein KeyObject der falschen Art für die Operation übergeben: crypto.sign() braucht einen privaten Schlüssel, hat aber einen öffentlichen bekommen (oder verify() hat etwa einen geheimen Schlüssel bekommen). Die Schlüsselobjekte von Node kennen ihren eigenen Typ – öffentlich, privat oder geheim –, und jede API akzeptiert nur bestimmte Typen.

Warum der Fehler auftritt

So behebst du den Fehler

  1. 1.

    Schlüsseltypen an der Schnittstelle zusichern

    KeyObject.type ist „public“ | „private“ | „secret“. Eine einzeilige Assertion macht aus einem verwirrenden Kryptofehler schon beim Laden einen offensichtlichen.

    js
    import { createPrivateKey } from "node:crypto";
    
    const signingKey = createPrivateKey(pem);
    if (signingKey.type !== "private") {
      throw new Error(`expected private key, got ${signingKey.type}`);
    }
  2. 2.

    Jede Hälfte des Paars für ihre eigene Operation verwenden

    Der private Schlüssel signiert, der öffentliche prüft. Hast du nur einen privaten Schlüssel, leite die öffentliche Hälfte für die Prüfung ab, statt das private Objekt überall wiederzuverwenden.

    js
    import { createPublicKey, sign, verify } from "node:crypto";
    
    const signature = sign("sha256", data, privateKey);          // private → sign
    const publicKey = createPublicKey(privateKey);               // derive public half
    const ok = verify("sha256", data, publicKey, signature);     // public → verify

Verwandte Fehler

Gesamte Signaturfehler-Datenbank durchsuchen