HTTPS簡介
HTTPS:https是http與ssl的結合,爲了解決http明文傳輸致使信息泄露的問題。ssl經過公鑰和私鑰保證客戶端和服務器之間的通信加密,由權威機構辦法的數字證書杜絕了中間人攻擊的可能。默認端口爲443。web
SSL須要到ca申請證書,通常免費證書較少,於是須要必定費用。(筆者一直用阿里雲,有個免費ssl申請,仍是挺適合我的使用的。聽說其餘雲商也有免費ssl)面試
有關HTTP發展歷史和HTTP2的詳細講解,能夠點擊查看這篇文章算法
有關HTTP鏈接中TCP握手揮手過程的詳細講解,能夠點擊查看這篇文章瀏覽器
HTTPS工做流程
client向server發送請求https://baidu.com,而後鏈接到server的443端口。緩存
服務端必需要有一套數字證書,能夠本身製做,也能夠向組織申請。區別就是本身頒發的證書須要客戶端驗證經過,才能夠繼續訪問,而使用受信任的公司申請的證書則不會彈出提示頁面,這套證書其實就是一對公鑰和私鑰。安全
傳送證書。這個證書其實就是公鑰,只是包含了不少信息,如證書的頒發機構,過時時間、服務端的公鑰,第三方證書認證機構(CA)的簽名,服務端的域名信息等內容。服務器
客戶端解析證書。這部分工做是由客戶端的TLS來完成的,首先會驗證公鑰是否有效,好比頒發機構,過時時間等等,若是發現異常,則會彈出一個警告框,提示證書存在問題。若是證書沒有問題,那麼就生成一個隨即值(祕鑰)。而後用證書對該隨機值進行加密。微信
傳送加密信息。這部分傳送的是用證書加密後的祕鑰,目的就是讓服務端獲得這個祕鑰,之後客戶端和服務端的通訊就能夠經過這個隨機值來進行加密解密了。網絡
服務段加密信息。服務端用私鑰解密祕鑰,獲得了客戶端傳過來的私鑰,而後把內容經過該值進行對稱加密。數據結構
傳輸加密後的信息。這部分信息是服務端用私鑰加密後的信息,能夠在客戶端被還原。
客戶端解密信息。客戶端用以前生成的私鑰解密服務端傳過來的信息,因而獲取瞭解密後的內容。
相關名詞解釋
對稱加密算法(symmetric key algorithms)
在對稱加密算法中,加密使用的密鑰和解密使用的密鑰是相同的,所以對稱加密算法要保證安全性的話,密鑰要作好保密,只能讓使用的人知道,不能對外公開。對稱加密算法中,加密和解密都是使用同一個密鑰,不區分公鑰和私鑰。
密鑰,通常就是一個字符串或數字,在加密或者解密時傳遞給加密/解密算法。
非對稱加密算法(asymmetric key algorithms)
在非對稱加密算法中,加密使用的密鑰和解密使用的密鑰是不相同的。
注意:私鑰加密後的密文,只要是公鑰,均可以解密,可是反過來公鑰加密後的密文,只有私鑰能夠解密。私鑰只有一我的有,而公鑰能夠發給全部的人。
中間人攻擊
中間人攻擊(Man-in-the-MiddleAttack)是指,黑客攔截並篡改網絡中的通訊數據。又分爲被動MITM和主動MITM,被動MITM只竊取通訊數據而不修改,而主動MITM不但能竊取數據,還會篡改通訊數據。最多見的中間人攻擊經常發生在公共wifi或者公共路由上。
圖爲客戶端主動發送消息時:
數字證書的安全傳輸
爲了防止中間人攻擊,整個傳輸過程當中亟需解決的是保證客戶端收到的公鑰是服務端發送的,爲此提出了數字證書,數字證書是由權威的CA機構給服務端進行頒發,CA機構經過服務端提供的相關信息生成證書,證書內容包含了持有人的相關信息,公鑰,簽署者簽名信息等,最重要的是公鑰在數字證書中。數字證書是如何保證公鑰來自請求的服務器呢?數字證書上由持有人的相關信息,經過這點能夠肯定其不是一箇中間人;可是證書也是能夠僞造的,如何保證證書爲真呢?一個證書中含有三個部分:"證書內容(F1), 加密算法(A),加密密文(F3') ",三者的關係以下圖,證書內容F1F會被散列算法SHA1計算出hash值F2,而後使用CA機構提供的私鑰進行RSA加密
當客戶端發起請求的時候,服務器將該數字證書發送給客戶端,客戶端將其中的加密密文(F3)經過CA機構提供的公鑰及逆行解密後獲得F2,同時將證書內容(F1)使用SHA1散列成F2,若是二者相等則說明證書沒問題。
因爲劫持者不知道當初加密使用的私鑰是什麼,因此永遠沒法僞造出一個正確的證書能夠經過上述的驗證。
HTTP的使用成本
安全性考慮:
HTTPS協議的加密範圍也比較有限,在黑客攻擊、拒絕服務攻擊、服務器劫持等方面幾乎起不到什麼做用。
SSL證書的信用鏈體系並不安全,特別是在某些國家能夠控制CA根證書的狀況下,中間人攻擊同樣可行。
成本考慮:
SSL證書須要購買申請,功能越強大的證書費用越高
SSL證書一般須要綁定IP,不能在同一IP上綁定多個域名,IPv4資源不可能支撐這個消耗(SSL有擴展能夠部分解決這個問題,可是比較麻煩,並且要求瀏覽器、操做系統支持,Windows XP就不支持這個擴展,考慮到XP的裝機量,這個特性幾乎沒用)。
根據ACM CoNEXT數據顯示,使用HTTPS協議會使頁面的加載時間延長近50%,增長10%到20%的耗電。
HTTPS鏈接緩存不如HTTP高效,流量成本高。
HTTPS鏈接服務器端資源佔用高不少,支持訪客多的網站須要投入更大的成本。
HTTPS協議握手階段比較費時,對網站的響應速度有影響,影響用戶體驗。比較好的方式是採用分而治之,相似12306網站的主頁使用HTTP協議,有關於用戶信息等方面使用HTTPS。
推薦閱讀
長按識別
關注咱們
本文分享自微信公衆號 - bigsai(bigsai)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。