Zum Inhalt springen
ecdsa.com
.NET System.Security.Cryptography.NET

Fehlermeldung

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')

Auch ausgegeben als

  • 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.

Ein Block `ENCRYPTED PRIVATE KEY` ergibt „An encrypted key was found, but no password was provided. Use ImportFromEncryptedPem to import this key.“

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

Was der Fehler bedeutet

`ImportFromPem` hat den String nach einem PEM-Block durchsucht, dessen Label es in dieses Algorithmusobjekt importieren kann, und keinen gefunden. Die Methode erwartet den PEM-Text, keinen Dateinamen, und ein Objekt vom Typ `ECDsa` akzeptiert nur EC-Labels (`PRIVATE KEY`, `EC PRIVATE KEY`, `PUBLIC KEY` mit einem EC-Schlüssel), ein Objekt vom Typ `RSA` nur RSA-Labels. Passt das Label, gehört der Schlüssel darin aber zu einem anderen Algorithmus, lautet der Fehler stattdessen „Key is not a valid public or private key.“

Warum der Fehler auftritt

So behebst du den Fehler

  1. 1.

    Dateiinhalt an den richtigen Algorithmus übergeben

    Lies die Datei, erzeuge das Objekt für den Algorithmus des Schlüssels und verwende für verschlüsselte Schlüssel die Variante für verschlüsselte Daten.

    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.

    Zertifikate als Zertifikate laden

    Nimm den öffentlichen Schlüssel aus einem `X509Certificate2`, statt das Zertifikats-PEM als Schlüssel zu importieren.

    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();

Verwandte Fehler

Gesamte Signaturfehler-Datenbank durchsuchen