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相关联,那为何不直接返回最下面那个呢?
转载于:https://blog.51cto.com/dog250/1592061
OpenSSL的SSL/BIO_get_fd相关推荐
- fatal: Unsupported SSL backend ‘“openssl”‘. Supported SSL backends:
$ git clone https://github.com/wdg1111/wdgreact.git Cloning into 'wdgreact'... fatal: Unsupported SS ...
- 31.openssl编程——SSL实现
31.1 概述 SSL协议最先由netscape公司提出,包括sslv2和sslv3两个版本.当前形成标准为tls协议(rfc2246规范)和DTLS(rfc4347,用于支持UDP协议).sslv3 ...
- 用OpenSSL编写SSL,TLS程序
http://zhoulifa.bokee.com/6134045.html http://blog.sina.com.cn/s/blog_86ca13bb0100vaph.html http://b ...
- OpenSSL编写SSL,TLS程序
一.简介: SSL(Secure Socket Layer)是netscape公司提出的主要用于web的安全通信标准,分为2.0版和3.0版.TLS(Transport Layer Security) ...
- 密码学专题 OpenSSL中SSL相关指令
再谈SSL和OpenSSL 由于SSL协议已经是密码学和PKI技术中非常具体的一个应用协议,为了实现它,OpenSSL在密码学基础应用和PKI技术的基础实现上做了大量的工作,才逐渐形成和奠定了Open ...
- 使用Openssl签发SSL证书
本文主要记述在Linux系统上使用Openssl创建SSL证书的流程,作为个人学习笔记.自签名证书分为自签名私有证书和自签名CA证书两种.自签名私有证书无法被吊销,自签名CA证书可以被吊销. 什么是o ...
- 通过openssl学习ssl证书。
通过抓包学习ssl:https://www.cnblogs.com/xiaxveliang/p/13183175.html 通过openssl学习ssl:http://3ms.huawei.com/k ...
- OpenSSL编写SSL,TLS程序***
一.简介 SSL(Secure Socket Layer)是netscape公司提出的主要用于web的安全通信标准,分为2.0版和3.0版.TLS(Transport Layer Security)是 ...
- openssl编写SSL、TLS程序
一.简介 SSL(Secure Socket Layer)是netscape公司提出的主要用于web的安全通信标准,分为2.0版和3.0版.TLS(Transport Layer Security)是 ...
最新文章
- .NET面试题(三)
- 仿网易云音乐客户端的底部播放器的实现思路
- Eclips将lib打入war中
- js高级程序设计 - 温故而知新
- JAVA类的无参方法
- lua脚本之lua语言简介以及lua的安装
- python高级-异常(13)
- html 图片旋转插件,jQuery插件expander实现图片翻转特效
- 搞懂 Vision Transformer 原理和代码,看这篇技术综述就够了(四)
- 如何在CentOS 7上安装和安全配置MariaDB 10
- C语言叠堆在变量周围,C语言及ARM中堆栈指针SP设置的理解与总结
- CRNN——文本识别算法
- 因为看了这些书,我大二就拿了腾讯OFFER
- 干货| 364套各类风格毕业设计答辩PPT模板~
- YOLOv3的环境配置
- JVM MAT使用分析详解
- unity——UI拖拽实现拼图
- 前言,flutter页面切换动画
- chrome打开链接隐私设置错误_解决用谷歌浏览器访问https网站遇到的“隐私设置错误 您的连接不是私密连接”问题...
- student dictionary
热门文章
- 作业09-集合与泛型
- 一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少...
- Centos6.8下搭建SVN服务器
- hdu 5131 (2014广州现场赛 E题)
- C++ 对数组sizeof 和对数组元素sizeof
- sql语句,怎么查看一个表中的所有约束
- 蜻蜓FM战略项目经理程彤博:真实需求背后的供给关系
- PMCAFF微课堂视频合集 | O2O产品的颠覆与布局
- 自媒体发展陷入僵局,社群媒体将成出路?呵呵…
- PMCAFF | 十大最坑爹的产品设计缺陷你遇到过几个?