HTTP的通信步驟
圖中簡述了HTTPS的通信步驟,具體分為以下:
1,客戶端通過發送Client Hello報文開始SSL通信。報文中包含客戶端支持的SSL的制定版本、加密組件列表(加密算法,密鑰長度等);
2,服務器可進行SSL通信時,會以Server Hello報文作為應答。和客戶端一樣,在報文中包含SSL版本以及加密組件。服務器的加密組件內容是從接收到的客戶端加密組件內篩選出來的;
3,之后服務器發送Certificate報文。報文中包含公開密鑰證書;
4,最后服務器發送Server Hello Done報文通知客戶端,最初階段的SSL握手協商部分結束;
5,SSL第一次握手結束之后,客戶端以Client Key Exchange報文作為回應。報文中包含通信加密中使用的一種被稱之為Pre-master secret的隨機密碼串。該報文已經用步驟3中的公開密鑰進行加密;
6,接著客戶端繼續發送Change Cipher Spec報文。該報文會提示服務器,在此報文之后的通信會采用Pre-master secret密鑰加密;
7,客戶端發送Finished報文。該報文包含連接至今全部報文的整體校驗值。這次握手協商是否能夠成功,要以服務器是否能夠正確解密該報文作為判定標準;
8,服務器同樣發送Change Cipher Spec報文;
9,服務器同樣發送Finished報文;
10,服務器和客戶端的Finished報文交換完畢之后,SSL連接就算建立完成。當然,通信會收到SSL的保護。從此處開始進行應用層協議的通信,即發送HTTP請求;
11,應用層協議通信,即發送HTTP響應;
12,最后由客戶端斷開連接。斷開連接時,發送close_notify報文。這步之后再發送TCP FIN報文來關閉與TCP的通信。
下圖是從僅使用服務器端的公開密鑰證書(服務器證書)建立HTTPS通信的整個過程的圖解。
HTTPS也存在一些問題:
問題一,即當使用SSL時,它的處理速度會變慢。SSL的慢分兩種。一種是通信慢,另一種是指由于大量消耗CPU及內存等資源,導致處理速度變慢。和使用HTTP相比,網絡負載可能會變慢2到100倍。
問題二,SSL必須進行加密處理。在服務器和客戶端都需要進行加密和解密的運算處理,這樣會比HTTP更多地消耗服務器和客戶端的硬件資源,導致負載增強。
因此,雖然HTTPS安全可靠,但是不是所有的Web網站都要一直使用HTTPS。