Aller au contenu
ecdsa.com
jsonwebtoken (Rust crate)Rust

Message d’erreur

Error(InvalidKeyFormat)

Également affiché sous la forme

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

`{:?}` affiche `Error(InvalidKeyFormat)`, `{}` affiche `InvalidKeyFormat`.

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

Ce que cela signifie

Le PEM que vous avez passé à un constructeur `EncodingKey`/`DecodingKey` n’a pas la structure que ce constructeur accepte. Pour les clés privées EC, `from_ec_pem` exige PKCS#8 (`-----BEGIN PRIVATE KEY-----`) et rejette la forme SEC 1 (`-----BEGIN EC PRIVATE KEY-----`) qu’écrit `openssl ecparam -genkey` ; les chargeurs RSA, EC et Ed25519 rejettent en outre chacun les clés des autres familles.

Pourquoi cela se produit

Comment corriger l’erreur

  1. 1.

    Convertir la clé privée en PKCS#8

    Une seule commande OpenSSL convertit les clés privées SEC 1 ou PKCS#1 en PKCS#8, que toutes les bibliothèques modernes savent lire.

    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.

    Utiliser le chargeur adapté à la clé

    Chaque famille d’algorithmes a son propre constructeur ; pour les JWK, utilisez `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

Erreurs associées

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