web-dev-qa-db-fra.com

Erreur lors de l'analyse de la demande de certificat: x509: courbe elliptique non prise en charge de Let's Encrypt

J'essaie d'obtenir un certificat X509 basé sur EC en utilisant secp256 à partir de Let's Encrypt. Let's Encrypt renvoie une erreur au lieu d'émettre le certificat:

$ letsencrypt --manual --csr ~/cryptopp-com.req.pem.ec auth
...

Press Enter to Continue
Waiting for verification...
Cleaning up challenges
An unexpected error occurred:
The request message was malformed :: Error parsing certificate request: x509: unsupported elliptic curve

La demande de signature de certificat me semble bien formée (voir ci-dessous). Secp256k1 et ecdsa sont des noms bien connus (même si j'ai déjà vu secp256k1 sous son nom ansi, prime256v1, à certains moments). secp256k1 est également la courbe la plus populaire utilisée sur Internet.

Le même processus fonctionne avec les clés RSA, je ne crois donc pas que le problème vient du processus.

Quel nom de courbe dois-je utiliser dans la demande?


# openssl req -in cryptopp-com.req.pem.ec -text -noout
Certificate Request:
    Data:
        Version: 0 (0x0)
        Subject: O=Crypto++ Project/[email protected]
        Subject Public Key Info:
            Public Key Algorithm: id-ecPublicKey
                Public-Key: (256 bit)
                pub:
                    04:22:61:22:38:d9:d4:05:a4:48:e6:42:c4:a8:2e:
                    9d:f0:59:4d:7c:4b:90:c0:20:d1:12:ec:57:21:47:
                    5f:30:dc:e5:c5:f7:c9:0f:a5:88:7b:bc:a1:1f:46:
                    33:7b:3c:21:b8:f9:11:42:9b:08:39:0d:e1:d1:bf:
                    f0:6e:66:4c:fb
                ASN1 OID: secp256k1
        Attributes:
        Requested Extensions:
            X509v3 Subject Key Identifier:
                A4:DC:43:6C:A8:7C:1C:98:34:9F:AE:BC:8B:F3:C7:47:4E:AE:8C:B4
            X509v3 Subject Alternative Name:
                DNS:cryptopp.com, DNS:www.cryptopp.com
            Netscape Comment:
                OpenSSL generated CSR
    Signature Algorithm: ecdsa-with-SHA256
         30:45:02:21:00:a7:ef:46:7d:ce:16:60:30:af:63:43:83:6f:
         63:02:21:58:50:c5:37:92:9e:46:d6:ac:c6:0d:57:7a:59:01:
         db:02:20:3c:5c:cb:36:57:11:c7:20:7a:a0:37:53:7a:da:62:
         9d:3e:4e:74:71:88:e0:1c:be:e1:fa:fd:c6:69:4c:30:c8
2
jww

Par https://letsencrypt.org/docs/integration-guide/ :

Let Encrypt accepte les clés RSA d’une longueur de 2048 à 4096 bits, ainsi que les clés P-256 et P-384 ECDSA. C’est vrai pour les clés de compte et les clés de certificat. Vous ne pouvez pas réutiliser une clé de compte en tant que clé de certificat.

Vous pouvez donc avoir des certificats basés sur EC, mais sachez qu’ils seront toujours signés par un certificat d’autorité de certification basé sur RSA, ce qui devrait changer en 2019.

Sur https://thecustomizewindows.com/2016/11/how-to-generate-lets-encrypt-ecc-ssl-ecdsa-certificate/ vous pouvez voir un exemple utilisant l'algorithme à clé nommé secp384r1

Et comme vous pouvez le voir sur https://scotthelme.co.uk/ecdsa-certificates/ , l'autre algorithme de clé que vous pouvez utiliser est secp256r1.

Vous dites que vous avez utilisé secp256k1, ceci est une autre courbe. Voir https://crypto.stackexchange.com/questions/18965/is-secp256r1-more-secure-than-secp256k1 qui dit en résumé:

La principale différence est que secp256k1 est une courbe de Koblitz, alors que secp256r1 ne l’est pas. Les courbes de Koblitz sont connues pour être un peu plus faibles que les autres courbes

(secp256r1 est une courbe aléatoire et non une courbe spécifique de Koblitz, d'où la différence de nom entre r et k)

3
Patrick Mevzek