Wymagania dotyczące generowania kluczy dla TLS ECDHE-ECDSA-AES128-GCM-SHA256
Zastanawiałem się, czy istnieją minimalne wymagania dotyczące generowania klucza dla ECDHE-ECDSA-AES128-GCM-SHA256 i ECDHE-ECDSA-AES128-GCM-SHA256? Próbuję uzyskać klienta i serwer TLS za pomocą jednego z powyższych algorytmów, aby połączyć się ze sobą i odbierać „brak wspólnych błędów szyfrowania”. Stworzyłem CA do podpisywania certyfikatów klienta i serwera i próbowałem połączyć się z openssl, a także z node.js. Używam cliengt i serwera na localhost (127.0.0.1), aby wyeliminować inne możliwe problemy.
Oto co zrobiłem do tej pory:
Tworzenie pary kluczy CA:
<code> $ openssl genrsa -out ca-key.pem 4096 $ openssl req -new -x509 -days 365 -key ca-key.pem -out ca-cert.pem </code>
Tworzenie pary kluczy serwer / klient:
<code> $ 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 </code>
Początkowo próbowałem połączyć się z serwerem node.js z linii poleceń (tls.createServer () z opcjami: szyfry: „ECDHE-ECDSA-AES256-GCM-SHA384: ECDHE-ECDSA-AES128-GCM-SHA256”), ale w celu wyeliminowania podejrzeń dotyczących węzłów wróciłem do openssl zarówno do tworzenia klienta, jak i serwera.
Następujące komendy CORRECTLY łączą się z klientem i serwerem i stwierdzają, że używa szyfru „Nowy, TLSv1 / SSLv3, Cipher to ECDHE-RSA-AES256-GCM-SHA384”:
<code>$ openssl s_server -accept 8888 -cert server-cert.pem -key server-key.pem -pass stdin -CAfile ca-cert.pem -state <password entered here> $ openssl s_client -connect 127.0.0.1:8888 -cert client-cert.pem -key client-key.pem -pass stdin -CAfile ca-cert.pem -state <password entered here> </code>
Z udostępnionymi informacjami szyfrowymi w następujący sposób:
<code>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 </code>
Następujące polecenia NIE działają, gdy określę szyfr na serwerze lub klienta i serwer. Należy pamiętać, że szyfr ECDHE-ECDSA-AES128-GCM-SHA256 jest wymieniony jako wymieniony na powyższej liście.
<code>$ 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 <password entered here> << Server output after client connection attempt >> 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 <password entered here> <<client output after connection attempt>> CONNECTED(00000003) 2674688:error:14077410:SSL routines:SSL23_GET_SERVER_HELLO:sslv3 alert handshake failure:s23_clnt.c:708: --- no peer certificate available --- No client certificate 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 --- </code>
Czy ktoś ma jakieś pomysły? Z góry dziękuję!