一步步弄懂HTTPS

爲何要使用HTTPS?

HTTP採用明文傳輸,存在被監聽、內容被篡改、身份被冒充的可能。爲了保證安全性,須要對數據進行加密,這便有了HTTPS。git

一步步分析HTTPS

1. 採用哪一種加密方式加密數據?

對稱加密 非對稱加密
特色 惟一的密鑰 一對公鑰和私鑰
優勢 加密速度快 公鑰公開,私鑰保密,只要私鑰不泄露就很安全
缺點 全部人都拿着同一密鑰,一旦泄露,全部相關數據所有都暴露 速度慢

從上表的對比看出,使用非對稱密鑰顯然更安全,可是加密速度慢。當數據量小的時候還好,數據大時顯然存在不足。但是對稱加密又不安全,怎麼辦?最好的辦法就是結合它們倆——對數據加密採用對稱加密,對對稱加密的密鑰採用非對稱加密。
github

2.如何傳輸對稱密鑰?

客戶端和服務端分別要用對稱密鑰來加密和解密,那這個對稱密鑰如何安全的讓雙方都知道呢?繼續用對稱密鑰顯然不行,此時就結合上非對稱密鑰。
安全

3.中間人攻擊


從圖中看出,即便有中間人替換了真正的公鑰,雙方也沒法得知,也就是說,雙方沒法確認對方身份。那若是對此公鑰也進行加密呢?那這樣仍是會存在中間人攻擊,也就是沒法加密多少層,只要最外層的公鑰須要傳輸給對方知道,最外層就有可能發生中間人攻擊。這時候咱們須要一個能夠不須要傳輸公鑰且又很安全的加密方法,此時就須要引入數字證書了(固然,數字證書的做用不單單只是不須要傳公鑰)。服務器

4.數字證書


這裏說明下,權威機構CA的公鑰不須要傳輸,由於權威機構CA會和主流的操做系統合做,將它們的公鑰內置在系統中,這樣客戶端收到數字證書後,從證書中找到權威機構CA的信息,而後根據此信息從本地找到此權威機構CA的公鑰進行解密便可。加密

爲何要用簽名這種方式?能夠防止如下3種狀況:操作系統

  • 若是中間人對服務器公鑰進行篡改,則客戶端在收到後利用CA的公鑰進行解密獲得摘要,這將服務器信息通過hash後的摘要不一樣,則能夠認爲此證書不可信;
  • 若是中間人對公鑰進行篡改後,想要製造出假的簽名以繞開以上狀況,此時中間人沒法得到CA的私鑰,也就沒法對摘要進行加密獲得簽名;即便強行找一個錯的私鑰進行加密,客戶端收到後沒法用CA的公鑰進行解密也沒用;
  • 若是中間人對整個數字證書進行掉包(將中間人的公鑰和域名發給CA,拿到中間人的數字證書),客戶端收到時仍然能夠利用CA公鑰進行解密獲得摘要,且對服務器信息(公鑰、域名)進行hash獲得的摘要同樣,但證書中的域名與客戶端正在訪問的域名不同,所以仍然認爲此證書不可信。

Charles代理HTTPS

其實,Charles代理HTTPS的原理就是以上的第二種狀況,即中間人Charles對服務器公鑰進行篡改,而後利用Charles簽證中心的私鑰對服務器信息進行加密,傳給客戶端。不一樣的是,此時客戶端已經信任了Charles簽證中心,因此能夠經過Charles簽證中心的公鑰對簽名進行解密。所以,Charles能代理HTTPS的主要緣由就是:客戶端安裝證書信任了Charles簽證中心.net

參考文章:
https://github.com/youngwind/blog/issues/108
https://blog.csdn.net/winwill2012/article/details/71774469代理

相關文章
相關標籤/搜索