OpenSSL 1.1.1 PSK TLS1.3 - TLS_256_GCM_SHA384 密码套件没有合适的签名算法错误
OpenSSL 1.1.1 PSK TLS1.3 - no suitable signature algorithm error with TLS_256_GCM_SHA384 ciphersuite
我 运行 在 windows 中使用 OpenSSL 1.1.1l 2021 年 8 月 24 日进行了一些测试,
对 PSK TLS_128_GCM_SHA256 和 TLS_256_GCM_SHA384.
使用 s_client 和 s_server
对于 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:ssl\t1_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:ssl\record\rec_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)
---
我错过了什么?
谢谢!
TLSv1.3 中的 PSK 必须与哈希相关联。默认情况下 s_server 和 s_client 将使用 SHA256。 TLS_AES_256_GCM_SHA384 密码套件使用 SHA384,因此与 PSK 关联的 SHA256 不兼容。
遗憾的是,没有选项可以告诉 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
这会将来自连接的密钥保存在会话文件中,并将其与密码套件 (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
我 运行 在 windows 中使用 OpenSSL 1.1.1l 2021 年 8 月 24 日进行了一些测试, 对 PSK TLS_128_GCM_SHA256 和 TLS_256_GCM_SHA384.
使用 s_client 和 s_server对于 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:ssl\t1_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:ssl\record\rec_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)
---
我错过了什么? 谢谢!
TLSv1.3 中的 PSK 必须与哈希相关联。默认情况下 s_server 和 s_client 将使用 SHA256。 TLS_AES_256_GCM_SHA384 密码套件使用 SHA384,因此与 PSK 关联的 SHA256 不兼容。
遗憾的是,没有选项可以告诉 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
这会将来自连接的密钥保存在会话文件中,并将其与密码套件 (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