Вопрос по node.js, openssl – Требования к генерации ключей для TLS ECDHE-ECDSA-AES128-GCM-SHA256

10

Мне было интересно, есть ли минимальные требования к генерации ключей для ECDHE-ECDSA-AES128-GCM-SHA256 и ECDHE-ECDSA-AES128-GCM-SHA256? Я пытаюсь получить клиент и сервер TLS, используя один из вышеперечисленных алгоритмов, для соединения друг с другом и продолжаю получать сообщения «нет общих ошибок шифрования». Я создал ЦС для подписи клиентских и серверных сертификатов и попытался подключиться только с помощью openssl, а также в node.js. Я использую клиент и сервер на локальном хосте (127.0.0.1), чтобы устранить любые другие возможные проблемы.

Вот что я сделал до сих пор:

Создание пары ключей CA:

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

Создание пары ключей сервер / клиент:

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

Первоначально я пытался подключиться к серверу node.js из командной строки (tls.createServer () с параметрами: шифры: & e; ECDHE-ECDSA-AES256-GCM-SHA384: ECDHE-ECDSA-AES128-GCM-SHA256 & apos;) , но для устранения подозрений узла я прибегнул к openssl для создания клиента и сервера.

Следующие команды ПРАВИЛЬНО подключаются к клиенту и серверу и заявляют, что используют шифр «Новый, TLSv1 / SSLv3, Шифр 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>

С информацией общего шифра следующим образом:

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

Следующие команды НЕ работают, когда я указываю шифр на сервере или на клиенте и сервере. Обратите внимание, что шифр ECDHE-ECDSA-AES128-GCM-SHA256 указан как общий в приведенном выше списке.

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

У кого-нибудь есть какие-либо идеи? Заранее спасибо!

Я использую OpenSSL 1.0.1 14 марта 2012 г. aspergillusOryzae
Какую версию openssl вы используете? версия openssl Paddy Carroll
Также обязательно используйте «именованную кривую». Подробнее см.Elliptic Curve Cryptography | Named Curves на OpenSSL вики. jww

Ваш Ответ

1   ответ
16

 openssl genrsa -out ca-key.pem 4096 

Вам нужно использоватьecparam

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

а также

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

genrsa генерирует ключ RSA, который при использовании с ECDHE аутентифицирует обмен ключами Диффи-Хеллмана по эллиптической кривой (ECDHE).

ECDSA в ECDHE-ECDSA-AES128-GCM-SHA256 означает, что вам необходим алгоритм цифровой подписи эллиптической кривой для аутентификации этого ключа. Поскольку у вас нет таких ключей, команда не выполняется. Однако ECDHE-RSA-AES256-GCM-SHA384 работает, потому что он использует имеющиеся у вас ключи RSA.

Вы получаете sha384, потому что openssl выбирает самый сильный набор шифров и при прочих равных условиях sha384 лучше, чем sha256. Вы можете переопределить это, и похоже, что вы сделали это с--cipher.

Обратите внимание, что вы можете использовать другую кривую. Вы можете получить полный список с

openssl ecparam -list_curves

Из любопытства, почему этот конкретный набор шифров? ECDHE и ECDSA - это современное состояние, но sha256 - это просто стандарт, и AES 128, безусловно, достаточно хорош, люди склонны использовать 256, если они проявляют такую же осторожность, как и ECDHE и ECDSA.

Error: User Rate Limit ExceededstrongError: User Rate Limit Exceeded
Error: User Rate Limit Exceededat serverError: User Rate Limit Exceededat clientError: User Rate Limit Exceeded
Error: User Rate Limit ExceededCertificateRequestError: User Rate Limit Exceededchain/CAError: User Rate Limit Exceededsignature_algorithmsError: User Rate Limit ExceedednotError: User Rate Limit Exceeded
Error: User Rate Limit ExceededRFC 6460Error: User Rate Limit ExceededexamplesError: User Rate Limit Exceeded aspergillusOryzae
Error: User Rate Limit ExceededElliptic Curve CA guideError: User Rate Limit ExceededCA examplesError: User Rate Limit Exceededopenssl s_server -accept 8888 -cert server.cert -key server.key -pass stdin -CAfile ca.cert -cipher ECDHE-ECDSA-AES128-GCM-SHA256Error: User Rate Limit Exceededopenssl s_client -connect 127.0.0.1:8888 -cert client.cert -key client.key -pass stdin -CAfile ca.cert -cipher ECDHE-ECDSA-AES128-GCM-SHA256 aspergillusOryzae

Похожие вопросы