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

Message d’erreur

Failed to read asymmetric key

Node.js crypto — e.g. code ERR_OSSL_ASN1_WRONG_TAG

Ce que cela signifie

createPublicKey() (ou tout appel qui prend une clé publique en DER, comme crypto.verify()) a reçu des octets dont la structure ASN.1 ne correspond pas au type que vous avez déclaré, par exemple type: "spki" alors que les octets sont en réalité une clé privée EC SEC1. OpenSSL a poussé l’analyse assez loin pour savoir que les tags sont incorrects, puis s’est arrêté. (createPrivateKey() et un PEM mal étiqueté signalent le même genre de non-concordance dans les termes propres à OpenSSL, comme « error:068000A8:asn1 encoding routines::wrong tag ».) Le code associé (ERR_OSSL_ASN1_WRONG_TAG et ses variantes) nomme la non-concordance au niveau ASN.1. Contrairement à l’erreur « unsupported » du décodeur (DECODER routines), qui signifie que rien d’analysable n’a été trouvé, celle-ci signifie que les octets avaient manifestement une structure qui ne convient pas au type déclaré.

Pourquoi cela se produit

Comment corriger l’erreur

  1. 1.

    Identifier la structure, puis la déclarer correctement

    asn1parse affiche la structure externe. Une structure SPKI commence par une SEQUENCE contenant un AlgorithmIdentifier ; PKCS#8 commence par une version INTEGER 0 ; les clés EC SEC1, par INTEGER 1.

    bash
    openssl asn1parse -inform der -in key.der | head -5
  2. 2.

    Aligner les options de Node sur le conteneur

    Une fois le conteneur connu, la correspondance est mécanique.

    js
    // SPKI public key
    createPublicKey({ key: der, format: "der", type: "spki" });
    // PKCS#8 private key
    createPrivateKey({ key: der, format: "der", type: "pkcs8" });
    // SEC1 (BEGIN EC PRIVATE KEY) private key
    createPrivateKey({ key: der, format: "der", type: "sec1" });
  3. 3.

    Convertir les anciens conteneurs une fois pour toutes, à la frontière du système

    Standardisez le stockage sur PKCS#8/SPKI pour que le code applicatif n’ait jamais à deviner.

    bash
    openssl pkey -in legacy-ec.pem -out key-pkcs8.pem            # any private → PKCS#8
    openssl pkey -in key-pkcs8.pem -pubout -out pub-spki.pem      # derive SPKI public

Erreurs associées

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