【问题标题】:What is the openssl API to configure the Heartbeat idle timeout什么是openssl API来配置心跳空闲超时
【发布时间】:2017-06-25 20:19:41
【问题描述】:

我正在使用 openssl 库来实现 tls 服务器。 如何使用openssl API配置心跳请求超时和重试次数来控制keepalive消息流?

【问题讨论】:

标签: c sockets ssl openssl tls1.2


【解决方案1】:

我假设您确实是指您所说的 TLS 而不是 DTLS。在 TLS 中使用心跳是很不寻常的,尽管 OpenSSL 在 1.0.2 版本中确实支持它。该支持已从 OpenSSL 1.1.0 中删除,因此,我建议不要在新应用程序中使用它。请改用 TCP 保持活动。

Heartbeat API 非常简单。你可以做三件事:

1) 使用SSL_heartbeat()发送心跳

2) 使用SSL_get_tlsext_heartbeat_pending() 查明先前发送的心跳是否仍在等待响应

3) 设置心跳模式,禁止对端使用SSL_set_tlsext_heartbeat_no_requests()发送心跳请求

其他任何事情都取决于应用程序。 TLS 中不需要重试,因为它被设计为在可靠的传输层上运行。如果连接是活动的,它将到达那里。如果不是,它不会。 TCP 层将处理丢失数据包的重传。超时也应该真正在 TCP 层完成。如果 TCP 连接超时,SSL 连接将失败。

【讨论】:

  • 支持。见enable-heartbeatsarg。
  • 请注意,我明确谈论的是 TLS 中的心跳在 1.1.0 中被删除 - 而不是 DTLS 中的心跳。 1.1.0 中的enable-heartbeats 选项仅适用于 DTLS。
  • 哥们,你用过吗?
  • 没有人使用 TLS 心跳。这就是它被删除的原因。删除它的 CHANGES 条目在这里:github.com/openssl/openssl/blob/…
  • 只有在空连接 2 小时后需要发送数据的选项。在我的情况下,它超过了 vpn。如果线程停止超过两个小时,则在 keepalive 之后不会发送任何内容。SSL_heartbeat 用于解决此问题。它是流式套接字和 tls , 1,1,0 。
猜你喜欢
  • 2014-07-09
  • 1970-01-01
  • 2013-09-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-24
  • 1970-01-01
  • 2022-09-23
相关资源
最近更新 更多