看板 C_and_CPP 關於我們 聯絡資訊
: 但我試著檢查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
Qbsuran: BIO哪層其實不是必要 03/20 22:25