相关疑难解决方法(0)

openSSL中的SSL与BIO对象

任何人都可以在OPENSSL API中解释我,我什么时候应该使用SSLread(),什么时候应该去BIOread().

我需要将openSSL代码集成到我现有的项目中以支持TLS,这样需要安全连接的应用程序才能使用它.我将在我的项目中使用非阻塞套接字,如何去做.

我已经浏览了一些文档,这些文档在以通常的方式创建和绑定套接字后将使用SSL_CTX和现有的套接字ID来创建SSL对象.使用此SSL对象,将执行SSL_read()和SSL_write()操作.但我不确定何时应该创建Bio对象并使用BIO_read()和BIO_write()

sockets ssl openssl

6
推荐指数
0
解决办法
660
查看次数

当BIO是内存BIO而不是套接字BIO时,BIO_read/BIO_write和SSL_read/SSL_write有什么区别?

当BIO是内存BIO而不是套接字BIO时,我对BIO例程BIO_read()/ BIO_write()和SSL_read()/ SSL_write()之间的区别感到困惑.

我正在尝试使用libnice为ICE堆栈编写WebRTC服务器,并为DTLS堆栈编写openssl.ICE堆栈具有到客户端的套接字连接,因此我无法在openssl中使用基于套接字的BIO.相反,我正在使用内存BIO.

所以我使用的高级过程是,当我从ICE套接字上的客户端收到DTLS消息时,我使用BIO_write()将该消息写入DTLS堆栈.然后,当DTLS堆栈有一条要发送到客户端的消息时,我使用BIO_read()获取该消息,并使用ICE套接字将其发送到客户端.

我已经看到了一些基本上执行此过程的源代码示例,但是在BIO_write()调用之后它们也调用了SSL_read()例程.这对我来说毫无意义.在我基本上使用BIO_write()调用将客户端消息写入DTLS堆栈之后,为什么需要调用SSL_read()?如果我在BIO_write()之后没有调用SSL_read(),那么我的代码不起作用.但是当我在BIO_write()之后调用SSL_read()时,这确实是与浏览器客户端交换握手消息.

问题:使用内存BIO,BIO_read()和SSL_read()之间有什么区别; 问题:使用内存BIO,BIO_write()和SSL_write()之间有什么区别?问题:默认内存是BIO阻塞还是非阻塞?我假设它是非阻塞的,因为它是基于内存的BIO而不是基于套接字的BIO.

谢谢,-Andres

openssl dtls webrtc

5
推荐指数
1
解决办法
4430
查看次数

标签 统计

openssl ×2

dtls ×1

sockets ×1

ssl ×1

webrtc ×1