【问题标题】:boost ssl half close socket is possible?boost ssl半封闭套接字是可能的吗?
【发布时间】:2017-12-25 13:50:16
【问题描述】:

我有 ssl-server 和 ssl-client。它与 Boost ssl 示例几乎相同。

现在,

服务器打开(监听)然后客户端加入并将数据发送到服务器。

当发送数据完成时

使用socket_.lowest_layer().close();从客户端关闭套接字

我想把它改成半封闭的:发送关闭,阅读打开

并且客户端应该在半关闭之前发送boost::asio::error::eof

然后服务器捕获boost::asio::error::eof 并从服务器关闭套接字。

还有什么好的吗?和升压有一半关闭?

【问题讨论】:

    标签: c++ sockets ssl boost boost-asio


    【解决方案1】:

    TCP 半关闭(关闭输出)不能与 SSL 一起使用。 SSL 发送一个close_notify,以便检测到截断攻击,这在逻辑上关闭了双向的 SSL 连接。如果你只是自己关闭底层的 TCP 套接字,SSL 将认为这是一种截断攻击,并使 SSL 连接不可用。

    我不明白您为什么要更改为您所描述的内容。 SSL 本身已经通过close_notify 实现了这一点。

    【讨论】:

    • 感谢您的评论。有没有其他方法可以从服务器关闭套接字。我认为从客户端关闭可能是危险的......//我的服务器只能在客户端关闭时捕获 eof..我需要其他方式
    • 我不明白这个问题。只需在 SSL 层关闭它。您不必先等待客户端关闭,尽管如果他仍在发送,他当然会收到错误。
    • 当许多客户端连接到服务器时。客户在发送完成后将关闭。此时我担心服务器会保留套接字或会话,直到超时或其他。担心没用?
    • 您应该在服务器上使用读取超时,足够长的时间以允许您认为合理的任何客户端不活动时间,如果发生这种情况只需关闭套接字。
    • 需要注意的是,TLS 1.3 现在允许半关闭。然而,这不是这个问题的答案。
    猜你喜欢
    • 1970-01-01
    • 2013-02-25
    • 1970-01-01
    • 1970-01-01
    • 2022-01-25
    • 2011-02-13
    • 2011-04-07
    • 2021-11-06
    • 1970-01-01
    相关资源
    最近更新 更多