OpenSSL的SSL/BIO_get_fd

简介:

只要是用到了OpenSSL,总会碰到让人心塞的事。
这次是SSL_get_fd。我用一种很简单的方式创建了一个SSL对象,直接在这个对象上进行SSL的accept:

bio = BIO_new(BIO_s_accept());
BIO_set_accept_port(bio, "1234");
BIO_do_accept(bio);
SSL_set_bio(ssl, bio, bio);
SSL_accept(ssl);

这样就不必折腾讨厌的sockaddr了。后来我想在和这个SSL对象关联的底层socket上执行 setsockopt,想当然的使用了SSL_get_fd/BIO_get_fd这个非常自明的API。到此为止非常棒。接下来就不爽了,我发现 setsockiot最终操作的那个描述符是listnen套接字,而不是accept返回的那个套接字。这似乎在API层面上十分合理,毕竟bio的参 数就是一个BIO_s_accept,而和它关联的就是一个listen套接字。想要正确的得到accept返回的读写socket描述符,你得这么写:

BIO_get_fd(BIO_next(bio), &sd);

问题是,你必须知道这个BIO stack是如何排列的才能写出上面的代码,做到如此最好的办法就是看OpenSSL的源代码。
       BIO的API设计就一定要设计成get/set_fd吗?BIO就一定要和一个fd相关吗?memory类型的BIO如果get fd的话,会返回怎么的错误吗呢?既然BIO构成了一个叠加的IO stack,那么也许之有最下面的那个才会和一个UNIX fd相关联,那为何不直接返回最下面那个呢?



 本文转自 dog250 51CTO博客,原文链接:http://blog.51cto.com/dog250/1592061

相关文章
|
4月前
|
应用服务中间件 Linux 网络安全
Linux【脚本 06】HTTPS转发HTTP安装OpenSSL、Nginx(with-http_ssl_module)及自签名的X.509数字证书生成(一键部署生成脚本分享)
Linux【脚本 06】HTTPS转发HTTP安装OpenSSL、Nginx(with-http_ssl_module)及自签名的X.509数字证书生成(一键部署生成脚本分享)
66 1
|
3月前
|
网络安全 开发工具 git
解决 OpenSSL SSL_read: Connection was reset, errno 10054的问题
解决 OpenSSL SSL_read: Connection was reset, errno 10054的问题
|
4月前
【Error】fatal: unable to access ‘https://github.com/PanJiaChen/vue-element-admin/‘: OpenSSL SSL_read:
【Error】fatal: unable to access ‘https://github.com/PanJiaChen/vue-element-admin/‘: OpenSSL SSL_read:
|
5月前
|
网络安全
20.8 OpenSSL 套接字SSL传输文件
有了上面的基础那么传输文件的实现就变得简单了,在传输时通常我们需要打开文件,并每次读入`1024`个字节的数据包,通过`SSL`加密传输即可,此处的文件传输功能在原生套接字章节中也进行过详细讲解,此处我们还是使用原来的密钥对,实现一个服务端等待客户端上传,当客户端连接到服务端后则开始传输文件,服务端接收文件的功能。
34 0
20.8 OpenSSL 套接字SSL传输文件
|
5月前
|
开发工具 git
OpenSSL SSL_connect: Connection was reset in connection to github.com:443
OpenSSL SSL_connect: Connection was reset in connection to github.com:443
|
6月前
|
缓存 Shell 网络安全
Github-推送代码报错“error:RPC failed;curl 56 OpenSSL SSL_read: SSL_ERROR_SYSCALL,errno 10054”解决方案
Github-推送代码报错“error:RPC failed;curl 56 OpenSSL SSL_read: SSL_ERROR_SYSCALL,errno 10054”解决方案
108 0
|
8月前
|
安全 网络协议 Shell
iOS 逆向编程(六) SSH、OpenSSH、SSL、OpenSSL 简介与关系
iOS 逆向编程(六) SSH、OpenSSH、SSL、OpenSSL 简介与关系
179 0
|
10月前
|
安全 JavaScript 网络安全
错误:写入 EPROTO 3928:错误:1408F10B:SSL 例程:ssl3_get_record:错误版本号:c:\ws\deps\openssl\openssl\ssl\record\ssl3_record.c:332 #71
错误:写入 EPROTO 3928:错误:1408F10B:SSL 例程:ssl3_get_record:错误版本号:c:\ws\deps\openssl\openssl\ssl\record\ssl3_record.c:332 #71
157 0
|
11月前
解决OpenSSL SSL_read: Connection was reset, errno 10054
解决OpenSSL SSL_read: Connection was reset, errno 10054
275 0
|
11月前
|
开发工具 git
【git】解决OpenSSL SSL_read: Connection was reset, errno 10054 ...
【git】解决OpenSSL SSL_read: Connection was reset, errno 10054 ...
204 0