作者hn12404988 (Willy)
看板C_and_CPP
标题Re: [问题] openssl的ssl_read问题
时间Mon Mar 20 13:28:43 2017
: 但我试着检查SSL物件,和他底下的BIO都存在,socket也活着
: 而A和B的两个SSL都是同个CTX样板产生出来的,只差在A的SSL有多执行一个SSL_accept而已
: 难道是file descriptor有绑定SSL物件吗?我上网查了资料,但这方面资料很少
: 不知道有没有人熟悉openssl套件?
经过一天的奋战,在这里稍微解答一下自己问题
如果有错还请指正一起学习
另外帮自己这个专案打个广告:
https://github.com/hn12404988/hast_web/blob/master/README_Chinese.md
﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍
用语定义
C: 客户端,例如浏览器
S: 伺服器端
fd: file descriptor,一般的socket传递的指标
SSL: openssl的物件,用来解码编码等等
BIO: 介於fd和SSL之间的I/O桥梁
session: 每个加密连线下的纪录层(纪录一些meta资料,参数等等)
我要帮我的websocket进行升级,加上一层TLS(SSL的新名字)
看了文件後,大概理解为把传统的socket连线:
C <-> fd ------------------------------- fd <-> S
变成
C <-> fd <-> SSL -------------- SSL <-> fd <-> S
所以我想说,用一个SSL来替全部的fd来工作,反正fd可以一直换(详情查SSL_set_fd)
但经过一番努力後,发现事情有点棘手,因为架构事实上是这样:
C <-> fd <-> BIO <-> SSL --session-- SSL <-> BIO <-> fd <-> S
我後来努力在维持一个SSL,但随着fd变化更换BIO
BIO是可以更换没错,但是重点是在session,因为拥有这条加密连线的「加密解密资讯」
是独有没办法被多个fd享受的(因为一开始我以为都是同个crt和key档产生,应该都一样吧)
也有努力一下在抽换session,但就是失败,所以目前得出结论和这个专案的作法
其实也只是每一条连线都创一个新SSL物件
如果有人更了解openssl连线架构,觉得我是错的,请跟我说,因为我也不是很懂
而且我也一直想看看要怎麽优化这专案,不要每条连线都生个SSL物件,感谢
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 220.133.16.181
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/C_and_CPP/M.1489987726.A.6BC.html
1F:推 Qbsuran: BIO哪层其实不是必要 03/20 22:25