#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