HTTPS通信是相比HTTP通信更安全的一種通信協議;
我們都知道HTTPS能夠加密信息,以免敏感信息被第三方獲取。所以很多銀行網站或電子郵箱等等安全級別較高的服務都會採用HTTPS協議。
HTTPS其實是有兩部分組成:HTTP + SSL / TLS,也就是在HTTP上又加了一層處理加密信息的模塊。服務端和客戶端的信息傳輸都會通過TLS進行加密,所以傳輸的數據都是加密後的數據。具體是如何進行加密,解密,驗證的,且看下圖。
客戶端發起HTTPS請求
這個沒什麼好說的,就是用戶在瀏覽器裏輸入一個https網址,然後連接到server的443端口。服務端的加密配置
採用HTTPS協議的服務器必須要有一套數字證書,可以自己製作,也可以向CA組織申請。區別就是自己頒發的證書需要客戶端驗證通過,纔可以繼續訪問,而使用受信任的公司申請的證書則不會彈出提示頁面(startssl就是個不錯的選擇,有1年的免費服務)。
這套證書其實就是一對公鑰和私鑰。如果對公鑰和私鑰不太理解,可以想象成一把鑰匙和一個鎖頭,只是全世界只有你一個人有這把鑰匙,你可以把鎖頭給別人,別人可以用這個鎖把重要的東西鎖起來,然後發給你,因爲只有你一個人有這把鑰匙,所以只有你才能看到被這把鎖鎖起來的東西。服務端傳送證書給客戶端
這個證書其實就是公鑰,只是包含了很多信息,如證書的頒發機構,過期時間等等。客戶端解析證書
這部分工作是由客戶端的TLS來完成的,首先會驗證公鑰是否有效,比如頒發機構,過期時間等等,如果發現異常,則會彈出一個警告框,提示證書存在問題。
如果證書沒有問題,那麼就生成一個隨機值KEY。然後用證書的公鑰對該隨機值進行加密。就好像上面說的,把隨機值用鎖頭鎖起來,這樣除非有鑰匙,不然看不到被鎖住的內容。客戶端傳送加密KEY
這部分傳送的是用證書的公鑰加密後的隨機值,目的就是讓服務端得到這個隨機值,以後客戶端和服務端的通信就可以通過這個隨機值來進行加密解密了。服務端解密KEY
服務端用私鑰解密後,得到了客戶端傳過來的隨機值(KEY),然後把內容通過該值進行對稱加密。所謂對稱加密就是,將信息和KEY通過某種算法混合在一起,這樣除非知道KEY,不然無法獲取內容,而正好客戶端和服務端都知道這個KEY,所以只要加密算法夠彪悍,KEY夠複雜,數據就夠安全。服務端傳輸加密後的信息
這部分信息是服務端用私鑰加密後的信息,可以在客戶端被還原客戶端解密信息
客戶端用之前生成的KEY解密服務段傳過來的信息,於是獲取瞭解密後的內容。整個過程第三方即使監聽到了數據,也束手無策。
以上內容摘抄自以下鏈接:
http://www.liqwei.com/network/protocol/2012/906.shtml
還有一篇文章對HTTPS原理解釋的特別清楚:
http://www.cnblogs.com/devinzhang/archive/2012/02/28/2371631.html