OpenSSL 1.1.1 PSK TLS1.3 — нет подходящего алгоритма подписи ошибка с шифрами TLS_256_GCM_SHA384

#openssl #tls1.3 #tls-psk

Вопрос:

Я запускаю некоторые тесты в Windows с OpenSSL 1.1.1 l 24 августа 2021 года, используя s_client и s_server как для PSK TLS_128_GCM_SHA256, так и для TLS_256_GCM_SHA384.

Для PSK TLS_128_GCM_SHA256 я могу успешно установить соединение:

сервер:

 $openssl s_server -nocert -psk 1234567890ABCDEF -tls1_3 -ciphersuites TLS_AES_128_GCM_SHA256  

клиент

 openssl s_client -psk 1234567890ABCDEF -tls1_3 -ciphersuites TLS_AES_128_GCM_SHA256  

Однако я не могу успешно установить соединение для набора шифров TLS_AES_256_GCM_384

сервер

 $openssl s_server -psk 63ef2024b1de6417f856fab7005d38f6df70b6c5e97c220060e2ea122c4fdd054555827ab229457c366b2dd4817ff38b -ciphersuites TLS_AES_256_GCM_SHA384 -nocert -tls1_3  Using default temp DH parameters ACCEPT ERROR 30508:error:14201076:SSL routines:tls_choose_sigalg:no suitable signature algorithm:sslt1_lib.c:2760: shutting down SSL CONNECTION CLOSED  

клиент

 $openssl s_client -psk 63ef2024b1de6417f856fab7005d38f6df70b6c5e97c220060e2ea122c4fdd054555827ab229457c366b2dd4817ff38b -ciphersuites TLS_AES_256_GCM_SHA384 -tls1_3 CONNECTED(000001C4) 32968:error:14094410:SSL routines:ssl3_read_bytes:sslv3 alert handshake failure:sslrecordrec_layer_s3.c:1544:SSL alert number 40 --- no peer certificate available --- No client certificate CA names sent --- SSL handshake has read 7 bytes and written 291 bytes Verification: OK --- New, (NONE), Cipher is (NONE) Secure Renegotiation IS NOT supported Compression: NONE Expansion: NONE No ALPN negotiated Early data was not sent Verify return code: 0 (ok) ---  

Что я упускаю? Спасибо!

Ответ №1:

PSK в TLSv1.3 должен быть связан с хэшем. По умолчанию s_server и s_client будут использовать SHA256. Набор шифров TLS_AES_256_GCM_SHA384 использует SHA384 и поэтому несовместим с SHA256, связанным с PSK.

К сожалению, нет возможности указать s_client/s_server использовать другой хэш с PSK. Однако есть обходной путь. Вместо этого вы можете использовать -psk_session опцию, которая принимает файл сеанса в качестве аргумента. Вы можете создать файл сеанса, используя обычное (не PSK) соединение, подобное этому:

 $ openssl s_server -ciphersuites TLS_AES_256_GCM_SHA384 -tls1_3 -cert cert.pem -key key.pem $ openssl s_client -ciphersuites TLS_AES_256_GCM_SHA384 -tls1_3 -sess_out sess.pem  

Это сохраняет ключ из соединения в файле сеанса и связывает его с хэшем для ciphersuite (SHA384). Затем вы можете использовать файл сеанса в качестве PSK, как это:

 $ openssl s_server -ciphersuites TLS_AES_256_GCM_SHA384 -tls1_3 -psk_session sess.pem -nocert $ openssl s_client -ciphersuites TLS_AES_256_GCM_SHA384 -tls1_3 -psk_session sess.pem