尝试在 openssl s_client
中设置密码时出现以下错误:
# openssl s_client -connect 10.0.0.3:8443 -cipher TLS_AES_128_GCM_SHA256
Error with command: "-cipher TLS_AES_128_GCM_SHA256"
140230972122240:error:1410D0B9:SSL routines:SSL_CTX_set_cipher_list:no cipher match:../ssl/ssl_lib.c:2549:
当我在 Google 中查找此错误时,它表示
openssl ciphers
报告的列表中缺少该密码。 .然而,这种情况并非如此:# openssl ciphers | sed 's/:/\n/g' | grep TLS_AES_128_GCM_SHA256
TLS_AES_128_GCM_SHA256
此错误不是服务器配置的功能,因为即使我更改
-connect
也会打印IP地址是虚假的。很明显,问题发生在 s_client
之前甚至尝试连接到服务器。鉴于此错误消息似乎与
openssl ciphers
无关,这是什么意思? ?
最佳答案
TLSv1.3 显着改变了密码套件的工作方式。因此,为 TLSv1.2 及更低版本定义的密码套件在 TLSv1.3 中不起作用,反之亦然。出于这个原因,OpenSSL 也在内部单独处理它们,并且它们以不同的方式配置——即使“在线”TLSv1.2 和 TLSv1.3 密码套件列表被合并。 openssl ciphers
命令报告 TLSv1.2 和 TLSv1.3 密码套件的合并列表。
TLS_AES_128_GCM_SHA256 实际上是一个 TLSv1.3 密码套件:
$ openssl ciphers -v | grep TLS_AES_128_GCM_SHA256
TLS_AES_128_GCM_SHA256 TLSv1.3 Kx=any Au=any Enc=AESGCM(128) Mac=AEAD
因此,您需要在 s_client 中使用不同的命令行选项来使用该密码套件:
$ openssl s_client -connect 10.0.0.3:8443 -ciphersuites TLS_AES_128_GCM_SHA256
尽管实际上上述命令将发送默认 TLSv1.2 密码套件以及上述 TLSv1.3 密码套件的组合列表。如果您只想要一个密码套件,那么您还需要禁用 TLSv1.3 以下的协议(protocol)版本:
$ openssl s_client -connect 10.0.0.3:8443 -ciphersuites TLS_AES_128_GCM_SHA256 -tls1_3
但是请注意,您感兴趣的密码套件位于默认的 TLSv1.3 密码套件集中,因此如果您不设置任何其他 TLSv1.3 密码套件配置,无论如何它都会被发送。
关于openssl s_client 没有密码匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57212182/