Exigences de génération de clé pour TLS ECDHE-ECDSA-AES128-GCM-SHA256

Je me demandais s’il existait des exigences minimales en matière de génération de clé pour ECDHE-ECDSA-AES128-GCM-SHA256 et ECDHE-ECDSA-AES128-GCM-SHA256? J’essaie d’obtenir un client et un serveur TLS en utilisant l’un des algorithmes ci-dessus pour se connecter les uns aux autres et continuer à recevoir «aucune erreur de chiffrement partagé». J’ai créé une autorité de certificateion pour signer les certificates de serveur et de serveur et tenté de me connecter avec OpenSL et également dans node.js. J’exécute le cliengt et le serveur sur localhost (127.0.0.1) pour éliminer tout autre problème possible.

Voici ce que j’ai fait jusqu’à présent:

Création d’une paire de clés de l’autorité de certificateion:

$ openssl genrsa -out ca-key.pem 4096 $ openssl req -new -x509 -days 365 -key ca-key.pem -out ca-cert.pem 

Création de la paire clé / serveur:

  $ openssl genrsa -out server-key.pem 4096 $ openssl req -new -key server-key.pem -out server-csr.pem $ openssl x509 -req -days 365 -in server-csr.pem -CA ca-cert.pem -CAkey ca-key.pem -set_serial 01 -out server-cert.pem $ openssl genrsa -out client-key.pem 4096 $ openssl req -new -key client-key.pem -out client-csr.pem $ openssl x509 -req -days 365 -in client-csr.pem -CA ca-cert.pem -CAkey ca-key.pem -set_serial 02 -out client-cert.pem 

J’essayais à l’origine de me connecter à un serveur node.js à partir de la ligne de commande (tls.createServer () avec les options suivantes: chiffres: ‘ECDHE-ECDSA-AES256-GCM-SHA384: ECDHE-ECDSA-AES128-GCM-SHA256’), mais pour éliminer les suspicions de nœuds, je suis retourné à openssl pour la création de client et de serveur.

Les commandes suivantes se connectent CORRECTEMENT pour le client et le serveur et indiquent qu’elles utilisent un chiffrement “Nouveau, TLSv1 / SSLv3, le chiffrement est ECDHE-RSA-AES256-GCM-SHA384”:

 $ openssl s_server -accept 8888 -cert server-cert.pem -key server-key.pem -pass stdin -CAfile ca-cert.pem -state  $ openssl s_client -connect 127.0.0.1:8888 -cert client-cert.pem -key client-key.pem -pass stdin -CAfile ca-cert.pem -state  

Avec les informations de chiffrement partagées comme suit:

 Shared ciphers:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-R SA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES2 56-SHA:SRP-DSS-AES-256-CBC-SHA:SRP-RSA-AES-256-CBC-SHA:DHE-DSS-AES256-GCM-SHA384 :DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA256:DHE-RSA-A ES256-SHA:DHE-DSS-AES256-SHA:DHE-RSA-CAMELLIA256-SHA:DHE-DSS-CAMELLIA256-SHA:ECD H-RSA-AES256-GCM-SHA384:ECDH-ECDSA-AES256-GCM-SHA384:ECDH-RSA-AES256-SHA384:ECDH -ECDSA-AES256-SHA384:ECDH-RSA-AES256-SHA:ECDH-ECDSA-AES256-SHA:AES256-GCM-SHA384 :AES256-SHA256:AES256-SHA:CAMELLIA256-SHA:ECDHE-RSA-DES-CBC3-SHA:ECDHE-ECDSA-DES -CBC3-SHA:SRP-DSS-3DES-EDE-CBC-SHA:SRP-RSA-3DES-EDE-CBC-SHA:EDH-RSA-DES-CBC3-SHA :EDH-DSS-DES-CBC3-SHA:ECDH-RSA-DES-CBC3-SHA:ECDH-ECDSA-DES-CBC3-SHA:DES-CBC3-SHA :ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-SHA2 56:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:SRP-DSS -AES-128-CBC-SHA:SRP-RSA-AES-128-CBC-SHA:DHE-DSS-AES128-GCM-SHA256 

Les commandes suivantes ne fonctionnent PAS lorsque je spécifie un chiffre sur le serveur ou le client et le serveur. Notez que le chiffrement ECDHE-ECDSA-AES128-GCM-SHA256 est répertorié comme partagé dans la liste ci-dessus.

 $ openssl s_server -accept 8888 -cert server-cert.pem -key server-key.pem -pass stdin -CAfile ca-cert.pem -cipher ECDHE-ECDSA-AES128-GCM-SHA256  <> Using default temp DH parameters Using default temp ECDH parameters ACCEPT ERROR 2674688:error:1408A0C1:SSL routines:SSL3_GET_CLIENT_HELLO:no shared cipher:s3_srvr.c:1353: shutting down SSL CONNECTION CLOSED ACCEPT $ openssl s_client -connect 127.0.0.1:8888 -cert client-cert.pem -key client-key.pem -pass stdin -CAfile ca-cert.pem -cipher ECDHE-ECDSA-AES128-GCM-SHA256  <> CONNECTED(00000003) 2674688:error:14077410:SSL routines:SSL23_GET_SERVER_HELLO:sslv3 alert handshake failure:s23_clnt.c:708: --- no peer certificatee available --- No client certificatee CA names sent --- SSL handshake has read 7 bytes and written 166 bytes --- New, (NONE), Cipher is (NONE) Secure Renegotiation IS NOT supported Compression: NONE Expansion: NONE --- 

Quelqu’un a-t-il une idée? Merci d’avance!

    Vous faites le mauvais type de clé avec

      openssl genrsa -out ca-key.pem 4096 

    Vous devez utiliser ecparam

     openssl ecparam -name secp521r1 -out ca-key.pem -genkey 

    et

     openssl ecparam -name secp521r1 -out client-key.pem -genkey 

    genrsa génère une clé RSA qui, lorsqu’elle est utilisée avec ECDHE, authentifie l’échange de clé Elliptic Curve Diffie Hellman (ECDHE).

    L’ECDSA dans ECDHE-ECDSA-AES128-GCM-SHA256 signifie que vous avez besoin de l’algorithme de signature numérique à courbe elliptique pour authentifier cette clé. Parce que vous n’avez pas ce genre de clé, la commande échoue. Cependant, ECDHE-RSA-AES256-GCM-SHA384 fonctionne parce qu’il utilise les clés RSA que vous avez.

    Vous obtenez sha384 car openssl choisit la suite de chiffrement la plus puissante et toutes choses étant égales par ailleurs sha384 est meilleur que sha256. Vous pouvez remplacer ceci, et il semblerait que vous l’ayez fait avec l’ --cipher .

    Notez que vous voudrez peut-être utiliser une courbe différente. Vous pouvez obtenir la liste complète avec

     openssl ecparam -list_curves 

    Par curiosité, pourquoi cette suite de chiffrement spécifique? ECDHE et ECDSA sont à la pointe de la technologie, mais sha256 n’est qu’un standard, et bien AES 128 est assez bon, les gens ont tendance à en utiliser 256 s’ils sont aussi prudents que le suggèrent ECDHE et ECDSA.