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

Fehlermeldung

Invalid JWK EC key

Node.js crypto — TypeError, code ERR_CRYPTO_INVALID_JWK

Was der Fehler bedeutet

createPublicKey/createPrivateKey mit format: „jwk“ hat das JWK-Objekt abgelehnt: Pflichtfelder fehlen, Koordinaten lassen sich nicht dekodieren, oder der Punkt (x, y) liegt gar nicht auf der angegebenen Kurve. Node prüft den Punkt beim Import, deshalb fällt eine beschädigte oder abgeschnittene Koordinate schon hier auf, statt einen Schlüssel zu ergeben, mit dem sich nie eine Signatur bestätigen lässt. Dieselben Prüfungen laufen, ob der JWK nun von einem JWKS-Endpunkt, aus einer Konfigurationsdatei oder von einem anderen Dienst stammt – der Fehler belastet das Objekt, nicht den Transportweg.

Warum der Fehler auftritt

So behebst du den Fehler

  1. 1.

    Form des JWK vor dem Import prüfen

    Prüfe die Felder und die dekodierten Längen. Bei P-256 müssen x und y dekodiert jeweils genau 32 Byte ergeben.

    js
    const x = Buffer.from(jwk.x, "base64url");
    const y = Buffer.from(jwk.y, "base64url");
    console.log(jwk.kty, jwk.crv, x.length, y.length); // EC P-256 32 32
  2. 2.

    Zu kurze Koordinaten links auffüllen

    Hat ein Erzeuger führende Nullen entfernt, stelle die feste Länge wieder her, bevor du den JWK zusammenbaust.

    js
    const pad32 = (b) => Buffer.concat([Buffer.alloc(32 - b.length), b]);
    jwk.x = pad32(Buffer.from(jwk.x, "base64url")).toString("base64url");
    jwk.y = pad32(Buffer.from(jwk.y, "base64url")).toString("base64url");
    const key = crypto.createPublicKey({ key: jwk, format: "jwk" });
  3. 3.

    Aus vertrauenswürdiger Quelle neu beziehen

    Fallen Koordinaten durch die Prüfung und hast du den JWK nicht selbst gebaut, hol ihn erneut vom JWKS-Endpunkt des Ausstellers, statt Bytes zu reparieren – einem JWK, an dem du erst herumoperieren musst, solltest du nicht vertrauen.

Verwandte Fehler

Gesamte Signaturfehler-Datenbank durchsuchen