Zum Inhalt springen
ecdsa.com
WebCrypto crypto.subtle.sign / verifyWebCrypto

Fehlermeldung

InvalidAccessError: Unable to use this key to verify

Der Text oben ist die Formulierung von Node (sign liefert „Unable to use this key to sign“, ein Schlüssel eines anderen Algorithmus „Key algorithm mismatch“). Browser formulieren es anders – Chrome „key.usages does not permit this operation“, Firefox „A parameter or an operation is not supported by the underlying object“, Safari „CryptoKey doesn't support verification“ –, aber der DOMException-Name InvalidAccessError ist überall derselbe.

WebCrypto crypto.subtle.sign / verify — browsers & Node

Was der Fehler bedeutet

Das übergebene Schlüsselobjekt darf diese Operation nicht ausführen: Sein usages-Array enthält sie nicht, die Schlüsselklasse ist falsch (Prüfen mit einem privaten Schlüssel, Signieren mit einem öffentlichen), oder der Schlüssel gehört zu einem anderen Algorithmus als dem, den der Aufruf verlangt. Das Schlüsselmaterial kann völlig gültig sein – seine Berechtigungen oder seine Rolle sind es nicht.

Warum der Fehler auftritt

So behebst du den Fehler

  1. 1.

    Benötigte usages angeben

    Führe beim Generieren oder Importieren jede vorgesehene Operation auf; erfüllt ein Schlüssel mehrere Rollen, importiere dasselbe Material erneut mit anderen usages.

    js
    const keyPair = await crypto.subtle.generateKey(
      { name: "ECDSA", namedCurve: "P-256" },
      true,
      ["sign", "verify"],   // privateKey gets "sign", publicKey gets "verify"
    );
  2. 2.

    Jedem Aufruf die richtige Hälfte übergeben

    Sieh dir beim Debuggen key.type und key.usages an – sie geben genau an, was das Objekt darf.

    js
    console.log(key.type, key.usages); // e.g. "public" ["verify"]
    
    const sig = await crypto.subtle.sign(alg, keyPair.privateKey, data);
    const ok  = await crypto.subtle.verify(alg, keyPair.publicKey, sig, data);

Verwandte Fehler

Gesamte Signaturfehler-Datenbank durchsuchen