openssl s_client没有密码匹配

时间:2019-07-26 01:54:18

标签: 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无关,这意味着什么?

3 个答案:

答案 0 :(得分:1)

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的协议版本:

$ openssl s_client -connect 10.0.0.3:8443 -ciphersuites TLS_AES_128_GCM_SHA256 -tls1_3

但是请注意,您感兴趣的密码套件位于TLSv1.3密码套件的默认集合中,因此,如果您未设置任何其他TLSv1.3密码套件配置,则无论如何它将被发送。

答案 1 :(得分:0)

在握手期间,客户端和服务器协商应使用哪种密码。看起来服务器没有s_client中指定的密码。 从openssl密码手册页中,我看到TLS_AES_128_GCM_SHA256仅在TLS1.3版本中列出,因此您尝试连接的服务器可能仅支持协议到1.2,您可以通过在客户端和服务器之间放置嗅探器来查看握手数据确认实际情况。

答案 2 :(得分:0)

tls-cipher的{​​{1}}已更改为tls-ciphersuites,因此请在配置文件(.ovpn)中更改以下行:

TLS_AES_256_GCM_SHA384

tls-cipher TLS_AES_256_GCM_SHA384