openssl s_客户端没有密码匹配

openssl s_客户端没有密码匹配,openssl,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/

尝试在
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密码报告的列表中缺少密码。然而,情况并非如此:

# openssl ciphers | sed 's/:/\n/g' | grep TLS_AES_128_GCM_SHA256
TLS_AES_128_GCM_SHA256
此错误不是服务器配置的功能,因为即使我将
-connect
IP地址更改为虚假地址,也会打印此错误。因此,显然问题发生在
s_client
甚至尝试连接到服务器之前


鉴于此错误消息似乎与openssl密码无关,因此此错误消息的含义是什么?

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

TLSv1.3极大地改变了密码套件的工作方式。因此,为TLSv1.2及以下版本定义的密码套件在TLSv1.3中不起作用,反之亦然。由于这个原因,OpenSSL在内部也分别处理它们,并且它们以不同的方式进行配置——即使“在线”TLSv1.2和TLSv1.3密码套件列表被合并。
openssl密码
命令报告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
$ openssl s_client -connect 10.0.0.3:8443 -ciphersuites TLS_AES_128_GCM_SHA256
因此,您需要在s_客户端中使用不同的命令行选项来使用该密码套件:

$ 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
$ 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密码套件配置,它仍将被发送。

对于
tls\u AES\u 256\u GCM\u SHA384
,tls密码已更改为
tls密码套件,因此,更改配置文件(.ovpn)中的以下行:


Re:“看起来服务器没有指定的密码”。。。但如果是这种情况,那么为什么在s_客户端尝试连接到serer之前打印此消息(如问题中所述)?对,错误可能在连接之前。这可能是由于您使用的openssl版本,使用openssl1.1.1-pre8,我可以看到它与此命令一起工作,但我建议您下载最新版本并尝试使用它。这真的很有趣,因为我有TLS_AES256_GCM_SHA384在TLSv1.2中工作得很好,这比AES-128要多。但我明白你的意思。。。我将尝试使用TLSv1.3…是的,这很有效!请注意,我也必须将服务器从Python更改为C(我想这可能是另一个问题…),谢谢。而且,C API中似乎也存在这种
CipherSuite
业务。有
SSL\u set\u cipher\u列表
SSL\u set\u cipher\u密码套件
。多可爱啊。