http是超文本傳輸協議,是用來網絡間傳輸數據。底層是tcp協議(傳輸控制協議)。html
是一種面向鏈接的主機對主機層的可靠傳輸,這裏的可靠是指數據丟失極小。Tcp創建一次鏈接須要通過3次握手,而後纔開始傳輸數據。就是請求-迴應-再確認,保證發送和接收。算法
所以傳輸數據的效率不及udp數據報文協議(一種非面向鏈接的不可靠傳輸協議)。瀏覽器
http協議傳輸數據,數據在網絡間是明文傳輸的,所以不是很安全,容易被竊取。安全
是http協議的安全版,數據傳輸利用了加密技術,在網絡傳輸中數據就不是處於裸奔狀態了。服務器
加密有兩種,對稱加密和非對稱加密。網絡
對稱加密,即對數據的加密和解密都是用同一個祕鑰,這個祕鑰由發送方和接收方共同維護。可是共同維護這其中成本較高。tcp
非對稱加密,即對數據的加密和解密用不一樣的祕鑰。通常發送方用一個公鑰來對發送的數據加密,接收方用一個祕鑰來解密。網站
https採用的加密技術就是非對稱加密技術,瀏覽器端使用服務器提供的公鑰進行對數據加密發給服務器,服務器用私鑰對數據進行解密。解密後又將要返回的數據用祕鑰加密,瀏覽器又用公鑰解密。加密
有沒有發現上面的過程仍是有不安全的地方,由於公鑰是公開的,在服務器端對數據用祕鑰加密後,傳輸給請求者,這時候其餘人就能夠截獲數據利用公鑰解密,這樣就可能會發生數據泄露的危險。代理
有沒有更好的解決辦法呢。有,就是請求方和服務器之間協議出一個祕鑰(具體過程目前不太清楚)。請求方將這個祕鑰夾在數據中公鑰加密後傳輸給服務器,服務器用私鑰進行解密,從數據中獲得這個私鑰,而後將要返回的數據用這個私鑰加密後傳輸給請求方。請求方用以前的協議出的祕鑰解密。
以上還有一個問題,就是服務器怎麼將公鑰送到請求者手中呢?就要講講證書和CA了。
證書顧名思義,能證實其身份證書。而CA就是頒發安全證書的權威機構。
一般是服務器端會將公鑰發給CA,CA會產生一個安全證書,證書裏面就包含服務器的公鑰。
證書頒發的細節這裏先不展開,能夠先簡單理解爲,網站(服務器)向CA提交了申請,CA審覈經過後,將證書頒發給網站(服務器),用戶訪問網站(服務器 )的時候,網站(服務器)將證書給到用戶。
上面說到證書,就要提一提數字簽名和摘要了。
數字簽名和摘要是要來保證證書的合法有效的強力手段。
摘要就是對傳輸的內容用hash算法對其計算獲得一個固定長度的串,就是摘要了。
而後對摘要用CA的私鑰進行加密就屬於數字簽名了。
必需要用CA的公鑰才能解密。
證書包含了以下內容:
CA自己有本身的證書,江湖人稱「根證書」。這個「根證書」是用來證實CA的身份的,本質是一份普通的數字證書。
瀏覽器一般會內置大多數主流權威CA的根證書。
瀏覽器內置的CA的根證書包含了以下關鍵內容:
鑑別證書:
徹底僞造的證書
這種狀況比較簡單,對證書進行檢查:
篡改過的證書
假設代理經過某種途徑,拿到XX的證書,而後將證書的公鑰偷偷修改爲本身的,而後喜滋滋的認爲用戶要上鉤了。然而太單純了:
參考了園裏大神的文章 http://www.cnblogs.com/chyingp/p/https-introduction.html