gpt4 book ai didi

ssl - OpenSSL 连接 : alert internal error

转载 作者:太空宇宙 更新时间:2023-11-03 12:53:49 24 4
gpt4 key购买 nike

我有 100 个 HTTPS 服务在使用 SNI 的单个服务器上运行。 (实际上,我无权访问它们。这是一项任务。我所知道的只是它们的域名 N.xxx.yy,其中 N 的范围是 00 到 99。)任务是评估与这些服务器中的每一个的每个连接的安全性。所以一些服务器包含过期的证书、CN 错误的证书等。

我的问题是我无法通过某些服务器上的握手。我已经使用 OpenSSL 在 C++ 中编写了自己的应用程序,但我也尝试过使用 openssl s_client。这是我连接到服务器的方式:

openssl s_client -host N.xxx.yy -port 443 -verify 1 -servername N.xxx.yy -CAfile assignment-ca.pem

这就是我得到的:

139625941858168:error:14094438:SSL routines:ssl3_read_bytes:tlsv1 alert internal error:s3_pkt.c:1493:SSL alert number 80
139625941858168:error:140790E5:SSL routines:ssl23_write:ssl handshake failure:s23_lib.c:177:

在 Wireshark 中,我看到客户端发送了 ClientHello,服务器响应了 ServerHello(选择 TLSv1.2 和 ECDHE-RSA-AES256-GCM-SHA384) 后跟 Certificate,然后它向我发送了包含 Internal Error (80)Alert 消息。

在尝试了不同的方法之后我发现如果我使用 -tls1-tls1_1 运行 s_client 我可以成功地通过握手. -tls1_2 不起作用。更奇怪的是,即使协商了 TLSv1.2,通过 Chrome/Firefox/任何其他浏览器的连接也会成功。据我所知,Chrome 发送的密码列表与我或 s_client 不同,但即使修改了密码列表以匹配 Chrome 中的密码列表(并确保服务器选择 ECDHE-RSA- AES128-GCM-SHA256), 也不行。 Chrome 正在发送这些 TLS 扩展,我没有发送,但其中大部分似乎是空的:

Unknown 47802
renegotiation_info
Extended Master Secret
signed_certificate_timestamp
status_request
Application Layer Protocol Negotiation
channel_id
Unknown 6682

谁能给我解释一下这里发生了什么?不幸的是,我无法在服务器端调试它,所以这就是我所知道的。

更新:

在尝试伪造的 ClientHello 消息后,我设法将其追踪到 signature_algorithms 扩展。我的应用程序和 s_client 提供 SHA384 + {RSA,DSA,ECDSA} 但如果我删除这些并只保留 SHA256 + {RSA,DSA,ECDSA} code>,就像 Chrome 一样,它可以正常工作,并且我成功收到了 Server Key Exchange 消息。会不会是服务器不支持它,而不是提供有意义的错误消息,它只是意外结束并给我这个内部错误?

更新 2:

我在 RFC5246 中找到了为什么它适用于 1.2 之前的 TLS 版本的答案。上一个更新的问题仍然存在。

Note: this extension is not meaningful for TLS versions prior to 1.2.
Clients MUST NOT offer it if they are offering prior versions.
However, even if clients do offer it, the rules specified in [TLSEXT]
require servers to ignore extensions they do not understand.

最佳答案

由于您写道 -tls1_2 不起作用 我假设您和/或服务器使用较旧的 openssl 库。写这篇文章时的当前版本是 1.1.0e

自 0.9.8 以来有很多修复,这些修复经常出现在旧系统上。

对于 Version 1.0.1有这个修复,听起来像你的问题:

 `Some servers which support TLS 1.0 can choke if we initially indicate
support for TLS 1.2 and later renegotiate using TLS 1.0 in the RSA
encrypted premaster secret. As a workaround use the maximum permitted
client version in client hello, this should keep such servers happy
and still work with previous versions of OpenSSL.`

也许还有notable :

不允许在 TLS 1.0、1.1 连接中使用 TLS 1.2 SHA-256 密码套件。

所以我建议更新您的 openssl 版本,如果服务器超出您的控制范围,我会坚持使用您已经找到的设置。

关于ssl - OpenSSL 连接 : alert internal error,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43436412/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com