openssl s_client 没有密码匹配

标签 openssl

尝试在 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/

相关文章:

更新证书后,Ruby Net::HTTP 响应 OpenSSL::SSL::SSLError "certificate verify failed"

c++ OpenSSL,将公钥写入文件并从同一文件中读取它不会返回正确的 key

安装 Xcode 5 后不再构建使用 sqlcipher 的 iOS 项目

encryption - ssl_accept上的“no shared cipher”,为什么?

mysql:/usr/local/lib/libssl.so.1.1: version `OPENSSL_1_1_1' not found (mysql 需要)

objective-c - 解密Cocoa中的RSA公钥

ios - 在 OS X 上安装 OpenSSL 时出现架构不支持错误

php - 使用 PEM 文件在 PHP 中推送通知

c openssl 错误

c# - 在 C# 上获取文件的 SHA1 二进制 base64 哈希