【问题标题】:SSL Socket free and shutdownSSL 套接字免费和关闭
【发布时间】:2014-02-07 05:54:57
【问题描述】:

对于SSL 连接,从接受调用收到的FD 可以做什么?可以重复使用吗?

我想知道的确切想知道的是:

一旦我接受连接,我就会得到FD。 我使用SSL_new 创建了一个 SSL 句柄 (SSL*)。 使用SSL_set_fdFD 添加到此句柄。 我使用SSL_accept 握手。 现在,如果我在SSL* 上拨打SSL_shutdownFD 会被关闭吗? SSL_free 呢?

如果上述问题的答案是否定的,那么我可以将FD 与另一个SSL* 一起使用吗?

为了解释我到底想要什么,如果我们使用句柄SSL* 从连接FD 读取一些数据,然后我们释放或关闭SSL*,我们可以使用新的@ 从FD 读取剩余数据吗? 987654339@?

【问题讨论】:

标签: c++ sockets ssl openssl file-descriptor


【解决方案1】:

SSL_shutdown 仅通过套接字发送关闭通知。如果您想在之后将套接字作为普通套接字重用,则必须确保对方也执行了 SSL_shutdown。此信息为您提供 SSL_shutdown 的返回码:如果为 1,则 SSL 连接关闭,如果为 0,则应再次调用 SSL_shutdown,等待来自对等方的关闭通知。有关详细信息,请参阅 SSL_shutdown 文档。

完成此操作后,您可以继续将套接字用作普通套接字。这是在 SSL over FTP (ftps) 中所做的,例如使用“AUTH TLS”连接将升级为 SSL,使用“CCC”连接将再次降级为纯文本。

SSL_free 仅释放与 SSL 对象关联的内存,它不会更改套接字上的任何内容,也不会发送/接收任何数据。

【讨论】:

  • 请阅读我的最新编辑。对于这种用途,SSL_free 最适合还是我应该尝试关闭?
  • 就像我说的:SSL_free 只释放内存(实际上它会减少 SSL 对象上的引用计数器并在计数器变为 0 时释放内存)并且对套接字本身不做任何事情。如果您想读取套接字上的剩余数据,例如将套接字从 SSL 降级为普通套接字,您必须使用 SSL_shutdown 向对等方发送关闭通知,以便它关闭 SSL 会话。
  • 我想做的是将套接字传递给其他类,并从同一个连接中读取剩余的 ssl 数据。
  • 如果你想保持 SSL 连接打开你不应该调用 SSL_shutdown,因为这将结束 SSL 连接(但保持底层套接字打开)。如果您只是将 SSL 对象提供给另一个类,那么您也不应该调用 SSL_free - 因为其他类中仍然需要 SSL 对象。只有在不再需要 SSL 对象时才应调用 SSL_free,例如SSL_shutdown 之后。
  • @Bacon:SSL 层与底层套接字没有紧密耦合,即 SSL 层可以在套接字为非 SSL 数据甚至新 SSL 会话保持打开状态时关闭。如果这不能回答您在评论中提出的问题,请提出一个具有足够背景的真实问题。
猜你喜欢
  • 2021-10-11
  • 2016-09-03
  • 1970-01-01
  • 1970-01-01
  • 2011-05-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多