Aller au contenu
ecdsa.com
.NET System.Security.Cryptography.NET

Message d’erreur

No supported key formats were found. Check that the input represents the contents of a PEM-encoded key file, not the path to such a file. (Parameter 'input')

Également affiché sous la forme

  • An encrypted key was found, but no password was provided. Use ImportFromEncryptedPem to import this key. (Parameter 'input')
  • Key is not a valid public or private key.

Un bloc `ENCRYPTED PRIVATE KEY` donne « An encrypted key was found, but no password was provided. Use ImportFromEncryptedPem to import this key. »

.NET System.Security.Cryptography — ArgumentException from AsymmetricAlgorithm.ImportFromPem

Ce que cela signifie

`ImportFromPem` a parcouru la chaîne à la recherche d’un bloc PEM dont l’étiquette peut être importée dans cet objet d’algorithme, et n’en a trouvé aucun. La méthode prend le texte PEM, et non un nom de fichier, et un objet `ECDsa` n’accepte que les étiquettes EC (`PRIVATE KEY`, `EC PRIVATE KEY`, `PUBLIC KEY` avec une clé EC), un objet `RSA` que les étiquettes RSA. Lorsque l’étiquette convient mais que la clé qu’elle contient relève d’un autre algorithme, l’erreur est plutôt « Key is not a valid public or private key. »

Pourquoi cela se produit

Comment corriger l’erreur

  1. 1.

    Passer le contenu du fichier au bon algorithme

    Lisez le fichier, créez l’objet correspondant à l’algorithme de la clé et utilisez la variante pour clés chiffrées lorsque la clé est chiffrée.

    csharp
    using var ecdsa = ECDsa.Create();
    ecdsa.ImportFromPem(File.ReadAllText("/run/secrets/jwt-signing-key.pem")); // contents, not the path
    
    // encrypted PKCS#8:
    ecdsa.ImportFromEncryptedPem(File.ReadAllText(path), Environment.GetEnvironmentVariable("KEY_PASSPHRASE"));
  2. 2.

    Charger les certificats en tant que certificats

    Prenez la clé publique depuis un `X509Certificate2` au lieu d’importer le PEM du certificat comme une clé.

    csharp
    // .NET 9+: certificates are loaded with X509CertificateLoader, then the key is taken from them
    var cert = X509CertificateLoader.LoadCertificate(File.ReadAllBytes("cert.der"));
    using ECDsa? publicKey = cert.GetECDsaPublicKey();

Erreurs associées

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