Zum Inhalt springen
ecdsa.com
Go crypto/x509Go

Fehlermeldung

x509: unsupported elliptic curve

Reproduziert mit Go 1.26. Die Parser für private Schlüssel melden dieselbe Einschränkung mit anderen Worten: ParseECPrivateKey meldet „x509: unknown elliptic curve“, ParsePKCS8PrivateKey „x509: failed to parse EC private key embedded in PKCS#8: x509: unknown elliptic curve“.

Go crypto/x509 — ParsePKIXPublicKey / ParseCertificate

Was der Fehler bedeutet

Der Schlüssel oder das Zertifikat lässt sich strukturell parsen, aber die Kurven-OID gehört zu keiner Kurve, die die Standardbibliothek von Go unterstützt: crypto/x509 verarbeitet nur die NIST-Kurven P-224, P-256, P-384 und P-521. In der Praxis meint dieser Fehler fast immer eine bestimmte Kurve – secp256k1, die Kurve von Bitcoin und Ethereum, die bewusst nicht in der stdlib steckt: Das Go-Team liefert die NIST-Kurven mit zeitkonstanten Implementierungen aus und überlässt alles andere Paketen von Drittanbietern.

Warum der Fehler auftritt

So behebst du den Fehler

  1. 1.

    secp256k1 mit einer spezialisierten Bibliothek parsen

    Extrahiere den rohen Punkt selbst (oder aus der SEC1-Struktur) und übergib ihn an eine gepflegte secp256k1-Implementierung, etwa die von dcrd.

    go
    import (
        "github.com/decred/dcrd/dcrec/secp256k1/v4"
        "github.com/decred/dcrd/dcrec/secp256k1/v4/ecdsa"
    )
    
    pub, err := secp256k1.ParsePubKey(pointBytes)  // 33/65-byte SEC1 point
    ok := ecdsa.VerifySignature(...)               // via the package's ecdsa subpackage
  2. 2.

    Oder die Anwendung auf P-256 umstellen

    Braucht im System nichts secp256k1 (keine Interoperabilität mit Blockchains), erzeuge die Schlüssel auf einer Kurve neu, die die stdlib unterstützt – dann wird die gesamte Toolchain einfacher.

    bash
    openssl ecparam -name prime256v1 -genkey -noout -out key.pem
    openssl pkey -in key.pem -pubout -out pub.pem
  3. 3.

    Prüfen, welche Kurve das Material tatsächlich verwendet

    Bevor du zu einer Bibliothek greifst, lies die Kurven-OID aus der Datei aus: 1.3.132.0.10 ist secp256k1, 1.2.840.10045.3.1.7 ist P-256. So fallen auch falsch beschriftete Dateien auf, deren Kurve nicht die ist, die der Dateiname oder die Dokumentation angibt.

    bash
    openssl ec -in key.pem -noout -text | grep -A1 "ASN1 OID"
    openssl x509 -in cert.pem -noout -text | grep -iA2 "public key algorithm"

Verwandte Fehler

Gesamte Signaturfehler-Datenbank durchsuchen