我想跑步
openssl s_server -key rsa_key.pem -cert rsa_cert.pem
这将接受 Heartbeat 扩展。我的客户端
openssl s_client -connect localhost:4433 -key rsa_key.pem -cert rsa_cert.pem
在 ClientHello 中提供它,但服务器端没有选择它。在接受此扩展的情况下,我需要在运行服务器端做什么?
下一个问题是 - 我如何在服务器端知道我收到了心跳请求?我会在运行 s_server 的终端中看到它吗?我试过 Wireshark,但我不知道如何解密这些加密消息。我尝试将密钥添加到 Wireshark/Edit/Preferences,但没有帮助。
答案1
OpenSSL 1.0.2 支持 TLS 心跳。该功能已从 OpenSSL 1.1.0 中删除。因此,如果您使用版本 1.0.2 运行 s_client 并使用版本 1.1.0 运行 s_server,您将看到所遇到的行为,即提供但未接受心跳扩展。
s_client/s_server 不会直接告诉您它们何时收到 HEARTBEAT 请求,尽管它们会告诉您它们是否发送了 HEARTBEAT 请求,例如从 s_client 在终端上输入“B”,s_client 将报告“HEARTBEATING”。在 s_server 端,您将看到的只是消息“Read BLOCK”。这意味着服务器尝试读取传入数据,但没有任何应用程序数据可显示(因为 Heartbeat 不是应用程序数据)。同样,您可以反过来做同样的事情(即从 s_server 在终端上发出“B”)。
如果您愿意自己编译 OpenSSL,则可以获得更多信息。如果您使用“configure”(或 config)中的“enable-ssl-trace”选项编译 1.0.2,然后使用“-trace”选项启动 s_server 或 s_client,它将为您提供有关其发送和接收的数据包的详细信息 - 包括心跳数据包。