1. 程式人生 > >https加密通訊過程圖解

https加密通訊過程圖解

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