https加密通訊過程圖解
阿新 • • 發佈:2019-01-26
https其實就是建構在SSL/TLS之上的 http協議,所以https比http要佔用更多的資源
http使用TCP 三次握手建立連線,客戶端和伺服器需要交換3個包,https除了 TCP 的三個包,還要加上 ssl握手需要的9個包,所以一共是12個包。http 建立連線,按照下面連結中針對Computer Science House的測試,是114毫秒;https建立連線,耗費436毫秒。ssl 部分花費322毫秒,包括網路延時和ssl 本身加解密的開銷(伺服器根據客戶端的資訊確定是否需要生成新的主金鑰;伺服器回覆該主金鑰,並返回給客戶端一個用主金鑰認證的資訊;伺服器向客戶端請求數字簽名和公開金鑰)。
① 客戶端發起HTTPS請求
客戶端或者瀏覽器向伺服器傳送https請求
② 伺服器將公鑰返回給客戶端
HTTPS的伺服器端都有一套證書,可以自己生成,可以向授信公司或者組織申請花錢購買,區別就是不花錢瀏覽會彈出來警告,新增信任或者例外就可以了。如何構建一個https服務可以參考另一篇部落格:
③ 瀏覽器接收到伺服器公鑰
瀏覽器收到公鑰後會對公鑰進行一系列的驗證,如:頒發機構,過期時間等等。 認證失敗會有警告,比如上面說的我們自己生成的證書,不是授信組織辦法。 成功的話,會生成一個隨機值作為對稱加密的金鑰稍後還會提及到。 用伺服器返回的公鑰對這個隨機值進行加密
④ 加密後的隨機值傳送到伺服器
伺服器收到公鑰加密後的隨機值,會拿自己的私鑰去解,解開之後得到的隨機值
⑤ 客戶端與伺服器進行加密通訊
客戶端和伺服器端資訊資料通訊,就是祕鑰為隨機值的,對稱加密了
為什麼要用對稱加密呢,因為相對於非對稱加密,對稱加密對伺服器的資源開銷客戶忽略不計。
一般採用https的都是,在公網傳輸的web請求,像分散式的區域網資料傳輸是沒有必要的,只會加重伺服器開銷降低效能。
要想提高https的效能可以用nginx做負載均衡,或者購買ssl加速卡
nginx做負載均衡,可以參考:http://blog.csdn.net/mzh1992/article/details/53673571