【问题标题】:OpenSSL BIO and SSL_readOpenSSL BIO 和 SSL_read
【发布时间】:2019-03-26 10:45:01
【问题描述】:

在我们的客户端/服务器应用程序中,我们使用 TLS/TCP 协议进行消息传递。一段时间后,应用程序之间会发生消息转移(消息在开始时以正确的顺序发送和接收),即客户端将第 1000 条消息发送到服务器并接收第 999 条消息的响应。嫌疑人在客户端,我们在客户端独立实现 TCP 和 TLS 层,即不将 TCP 套接字绑定到 SSL 对象(通过 SSL_set_fd()),而是使用 BIO。当客户端应用程序从服务器获得响应时(很确定消息在服务器中正确处理,客户端 TCP 层正确接收消息等),消息被转发到 SSL 层。客户端应用程序首先将消息写入 BIO:

BIO_write(readBio, data, length);

然后在 SSL 层的另一个函数中,使用 SSL_read() 读取消息:

res = SSL_read (ssl, buffer, length);

读取操作已成功完成,但我的目标是检查 BIO 中是否还有要读取的记录。我考虑使用 SSL_pending() 方法,但似乎应该使用这个方法来检查 SAME 记录中是否还有字节。如果我们的怀疑是正确的,我想检查 BIO 中是否还有其他记录,以便所有消息都得到处理,不会有任何延迟。你能帮我解决这个问题吗?提前致谢。

【问题讨论】:

    标签: c++ ssl tcp openssl


    【解决方案1】:

    SSL_pending 告诉您当前解密的 SSL 记录中是否有数据尚未被 SSL_read 读取。 BIO_pending 可用于查明 BIO 中是否已经存在 SSL 层未处理的数据。要找出套接字级别的未读数据,请使用MSG_PEEK

    【讨论】:

      猜你喜欢
      • 2015-05-26
      • 1970-01-01
      • 2016-11-25
      • 1970-01-01
      • 1970-01-01
      • 2021-02-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多