推 Qbsuran: BIO哪層其實不是必要 03/20 22:25
: 但我試著檢查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://www.ptt.cc/bbs/C_and_CPP/M.1489987726.A.6BC.html