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

Fehlermeldung

Failed to read asymmetric key

Node.js crypto — e.g. code ERR_OSSL_ASN1_WRONG_TAG

Was der Fehler bedeutet

createPublicKey() – oder ein anderer Aufruf, der einen öffentlichen Schlüssel als DER entgegennimmt, etwa crypto.verify() – hat Bytes erhalten, deren ASN.1-Struktur nicht zum angegebenen Typ passt, zum Beispiel type: "spki", obwohl die Bytes tatsächlich ein privater EC-Schlüssel im SEC1-Format sind. OpenSSL hat weit genug geparst, um zu erkennen, dass die Tags falsch sind, und dann abgebrochen. (createPrivateKey() und PEM mit falschem Label melden dieselbe Art von Abweichung im Wortlaut von OpenSSL, etwa „error:068000A8:asn1 encoding routines::wrong tag“.) Der zugehörige Code (ERR_OSSL_ASN1_WRONG_TAG und verwandte Codes) benennt die Abweichung auf ASN.1-Ebene. Anders als der Fehler „unsupported“ der DECODER-Routinen, der bedeutet, dass überhaupt nichts Parsebares gefunden wurde, heißt dieser Fehler: Die Bytes hatten erkennbar die falsche Struktur für den angegebenen Typ.

Warum der Fehler auftritt

So behebst du den Fehler

  1. 1.

    Struktur ermitteln, dann wahrheitsgemäß angeben

    asn1parse gibt die äußere Struktur aus. Eine SPKI-Struktur beginnt mit einer SEQUENCE, die einen AlgorithmIdentifier enthält; PKCS#8 beginnt mit einer Version INTEGER 0; EC-Schlüssel im SEC1-Format mit INTEGER 1.

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

    Node-Optionen auf den Container abstimmen

    Sobald du den Container kennst, ist die Zuordnung rein mechanisch.

    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.

    Ältere Container einmal konvertieren, an der Systemgrenze

    Speichere einheitlich PKCS#8/SPKI, damit Anwendungscode nie raten muss.

    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

Verwandte Fehler

Gesamte Signaturfehler-Datenbank durchsuchen