Aller au contenu
ecdsa.com
Node.js cryptoNode.js crypto

Message d’erreur

Invalid JWK EC key

Node.js crypto — TypeError, code ERR_CRYPTO_INVALID_JWK

Ce que cela signifie

createPublicKey/createPrivateKey avec format: "jwk" a rejeté l’objet JWK : des membres obligatoires manquent, les coordonnées ne se décodent pas, ou le point (x, y) n’est pas réellement sur la courbe nommée. Node valide le point à l’import, si bien qu’une coordonnée corrompue ou tronquée est détectée ici au lieu de produire une clé qui ne vérifie jamais rien. Les mêmes contrôles s’appliquent, que la JWK provienne d’un point de terminaison JWKS, d’un fichier de configuration ou d’un autre service : l’erreur met en cause l’objet, pas le transport.

Pourquoi cela se produit

Comment corriger l’erreur

  1. 1.

    Valider la forme de la JWK avant l’import

    Contrôlez les membres et les longueurs après décodage. Pour P-256, x et y doivent chacun se décoder en exactement 32 octets.

    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.

    Compléter à gauche les coordonnées trop courtes

    Si un producteur a supprimé les zéros initiaux, rétablissez la longueur fixe avant de construire la JWK.

    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.

    Régénérer depuis une source de confiance

    Si les coordonnées échouent à la validation et que vous n’avez pas construit la JWK vous-même, récupérez-la à nouveau depuis le point de terminaison JWKS de l’émetteur plutôt que de réparer les octets : une JWK qui a besoin de chirurgie est une JWK à laquelle vous ne devriez pas faire confiance.

Erreurs associées

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