Zum Inhalt springen
ecdsa.com
jsonwebtoken (Rust crate)Rust

Fehlermeldung

Error(InvalidKeyFormat)

Auch ausgegeben als

  • called `Result::unwrap()` on an `Err` value: Error(InvalidKeyFormat)
  • InvalidKeyFormat

`{:?}` gibt `Error(InvalidKeyFormat)` aus, `{}` gibt `InvalidKeyFormat` aus.

jsonwebtoken (Rust crate) — ErrorKind::InvalidKeyFormat from EncodingKey::from_ec_pem / DecodingKey::from_*_pem

Was der Fehler bedeutet

Das PEM, das du einem Konstruktor von `EncodingKey`/`DecodingKey` übergeben hast, hat nicht die Struktur, die dieser Konstruktor akzeptiert. Bei privaten Schlüsseln vom Typ EC verlangt `from_ec_pem` PKCS#8 (`-----BEGIN PRIVATE KEY-----`) und lehnt die Form SEC 1 (`-----BEGIN EC PRIVATE KEY-----`) ab, die `openssl ecparam -genkey` schreibt; die Loader für RSA, EC und Ed25519 lehnen außerdem jeweils die Schlüssel der anderen Familien ab.

Warum der Fehler auftritt

So behebst du den Fehler

  1. 1.

    Privaten Schlüssel in PKCS#8 konvertieren

    Ein einziger OpenSSL-Befehl konvertiert private Schlüssel im Format SEC 1 oder PKCS#1 in PKCS#8, das jede moderne Bibliothek liest.

    bash
    # SEC 1 ("EC PRIVATE KEY") or PKCS#1 ("RSA PRIVATE KEY") -> PKCS#8 ("PRIVATE KEY")
    openssl pkcs8 -topk8 -nocrypt -in ec-sec1.pem -out ec-pkcs8.pem
  2. 2.

    Passenden Loader für den Schlüssel verwenden

    Jede Algorithmusfamilie hat einen eigenen Konstruktor; verwende für JWKs `DecodingKey::from_jwk`.

    rust
    let encoding = EncodingKey::from_ec_pem(&std::fs::read("ec-pkcs8.pem")?)?;   // ES256/ES384
    let decoding = DecodingKey::from_ec_pem(&std::fs::read("ec-public.pem")?)?;   // "PUBLIC KEY"
    let rsa = DecodingKey::from_rsa_pem(&std::fs::read("rsa-public.pem")?)?;     // RS*/PS*
    let ed = DecodingKey::from_ed_pem(&std::fs::read("ed25519-public.pem")?)?;   // EdDSA

Verwandte Fehler

Gesamte Signaturfehler-Datenbank durchsuchen