首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >BIO_read/BIO_ when和SSL_read/SSL_when在BIO是内存BIOs而不是socket BIOs时有什么区别?

BIO_read/BIO_ when和SSL_read/SSL_when在BIO是内存BIOs而不是socket BIOs时有什么区别?
EN

Stack Overflow用户
提问于 2016-07-22 00:56:03
回答 1查看 7.4K关注 0票数 10

当BIO是内存BIOs而不是socket BIOs时,我对BIO例程BIO_read()/BIO_write()SSL_read()/SSL_write()之间的区别感到困惑。

我正在尝试使用WebRTC服务器对ICE堆栈使用libnice编写代码,为DTLS堆栈使用OpenSSL。ICE堆栈与客户端有套接字连接,因此我不能在OpenSSL中使用基于套接字的BIOs。相反,我使用的是内存BIOs。

因此,我使用的高级过程是,当我从ICE套接字上的客户端接收DTLS消息时,我使用BIO_write()将该消息写入DTLS堆栈。然后,当DTLS堆栈有消息要发送给客户端时,我使用BIO_read()获得该消息,并使用ICE套接字将其发送给客户端。

我已经看到了一些源代码的例子,这些代码本质上是这样做的,但它们也在BIO_write()调用之后调用了BIO_write()例程。这对我来说毫无意义。为什么在我使用SSL_read()调用将客户机消息写入DTLS堆栈之后,对BIO_write()的调用是必要的?如果我没有在SSL_read()之后调用BIO_write(),那么我的代码就不能工作。但是,当我在SSL_read()之后调用BIO_write()时,这确实是在与浏览器客户端交换握手消息。

问题:使用内存BIOs,BIO_read()SSL_read()的区别是什么?

问题:使用内存BIOs,BIO_write()SSL_write()的区别是什么?

问题:默认内存BIO阻塞还是非阻塞?我假设它是非阻塞的,因为它是基于内存的BIO,而不是基于套接字的BIO。

谢谢,

-Andres

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-08-07 11:11:18

我无意中发现了同样的问题,因为我理解了整个事情是如何运作的。我可以为你提供一些有用的链接和濒危物种公约。

“SSL层设置为在缓冲区模式下工作。因此,执行SSL_write意味着我们将未加密的字节发送到SSL库,这样它就可以加密这些字节,并将得到的加密字节放在缓冲区中。然后我们使用BIO_read从缓冲区读取。同样的情况下,读取也是相反的。在这种情况下,我们实际上做了BIO_write然后SSL_read。”

来源:G5kpyA

OpenSSL数据处理-从下面的链接中检查此部分。可能会给你一些有用的信息。https://famellee.wordpress.com/2013/02/20/use-openssl-with-io-completion-port-and-certificate-signing/

BIOs -从下面的链接中检查这个部分。可能会给你一些有用的信息。http://www.roxlu.com/2014/042/using-openssl-with-memory-bios

票数 16
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38516584

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档