標籤:
參考自《圖解HTTP》
果殼網http://www.guokr.com/post/114121/
HTTPS的工作原理
增加了一層:HTTPS流程:應用程式層 HTTP->SSL/TLS->TCP->IP
為什麼不一直使用HTTPS?
與純文字傳輸相比,加密傳輸消耗大量的CPU與記憶體資源,HTTPS大概比HTTP慢2-100倍。它的慢體現在兩點:1.通訊慢 2.處理速度慢
HTTPS在傳輸資料之前需要用戶端(瀏覽器)與服務端(網站)之間進行一次握手,
在握手過程中將確立雙方加密傳輸資料的密碼資訊。TLS/SSL中使用了非對稱式加密,對稱式加密以及HASH演算法。握手過程的簡單描述如下:
1. 瀏覽器發送自己支援的一套加密規則給網站。
2. 網站從中選出一組密碼編譯演算法與HASH演算法,把自己的身份資訊以認證的形式發送給瀏覽器。認證裡麵包含了網站地址,加密公開金鑰,以及認證的頒發機構等資訊。
3. 瀏覽器得到網站認證後要做以下工作:
a) 驗證認證的合法性(頒發認證的機構是否合法,認證中包含的網站地址是否與正在訪問的地址一致等),如果認證受信任,則瀏覽器欄裡面會顯示一個小鎖頭,否則會給出認證不受信的提示。
b) 如果認證受信任,或者是使用者接受了不受信的認證,瀏覽器會產生一串隨機數的密碼,並用認證中提供的公開金鑰加密。
c) 使用約定好的HASH計算握手訊息,並使用產生的隨機數對訊息進行加密,最後將之前產生的所有資訊發送給網站。
4. 網站接收瀏覽器發來的資料之後要做以下的操作:
a) 使用自己的私密金鑰將資訊解密取出密碼,使用密碼解密瀏覽器發來的握手訊息,並驗證HASH是否與瀏覽器發來的一致。
b) 使用密碼加密一段握手訊息,發送給瀏覽器。
5. 瀏覽器解密並計算握手訊息的HASH,如果與服務端發來的HASH一致,此時握手過程結束,之後所有的通訊資料將由之前瀏覽器產生的隨機密碼並利用對稱密碼編譯演算法進行加密。
這裡瀏覽器與網站互相發送加密的握手訊息並驗證,目的是為了保證雙方都獲得了一致的密碼,並且可以正常的加密解密資料,為後續真正資料的傳輸做一次測試。另外,HTTPS一般使用的加密與HASH演算法如下:
非對稱式加密演算法:RSA,DSA/DSS
對稱式加密演算法:AES,RC4,3DES
HASH演算法:MD5,SHA1,SHA256
其中
非對稱式加密演算法用於在握手過程中加密產生的密碼,
對稱式加密演算法用於對真正傳輸的資料進行加密,
HASH演算法用於驗證資料的完整性。
由於瀏覽器產生的密碼是整個資料加密的關鍵,因此在傳輸的時候使用了非對稱式加密演算法對其加密。
非對稱式加密演算法會產生公開金鑰和私密金鑰,公開金鑰只能用於加密資料,因此可以隨意傳輸,而網站的私密金鑰用於對資料進行解密,所以網站都會非常小心的保管自己的私密金鑰,防止泄漏。
TLS握手過程中如果有任何錯誤,都會使加密串連斷開,從而阻止了隱私資訊的傳輸。
HTTPS的工作原理