1. 程式人生 > >https 建立連線過程

https 建立連線過程

思考問題的順序

學技術時,總是會問什麼?這裡也不例外,https為什麼會存在,它有什麼優點,又有什麼缺點?為什麼網站有的用http,有的用https?如果不能很好的回答,就往下看吧。

http通訊存在的問題

  • 容易被監聽
    • http通訊都是明文,資料在客戶端與伺服器通訊過程中,任何一點都可能被劫持。比如,傳送了銀行卡號和密碼,hacker劫取到資料,就能看到卡號和密碼,這是很危險的
  • 被偽裝
    • http通訊時,無法保證通行雙方是合法的,通訊方可能是偽裝的。比如你請求www.taobao.com,你怎麼知道返回的資料就是來自淘寶,中間人可能返回資料偽裝成淘寶。
  • 被篡改
    • hacker中間篡改資料後,接收方並不知道資料已經被更改

共享金鑰加密和公開金鑰加密

後續內容的需要,這裡插播一段共享金鑰加密和公開金鑰加密

  • 共享金鑰加密
    • 共享金鑰的加密金鑰和解密金鑰是相同的,所以又稱為對稱金鑰
  • 公開金鑰加密
    • 加密演算法是公開的,金鑰是保密的。公開金鑰分為私有金鑰和公有金鑰,公有金鑰是公開的,任何人(客戶端)都可以獲取,客戶端使用公有金鑰加密資料,服務端用私有金鑰解密資料。
  • 異同
    • 共享金鑰加密與公開金鑰加密相比,加解密處理速度快,但公開金鑰更適應網際網路下使用

https解決的問題

https很好的解決了http的三個缺點(被監聽、被篡改、被偽裝),https不是一種新的協議,它是http+SSL(TLS)的結合體,SSL是一種獨立協議,所以其它協議比如smtp等也可以跟ssl結合。https改變了通訊方式,它由以前的http—–>tcp,改為http——>SSL—–>tcp;https採用了共享金鑰加密+公開金鑰加密的方式

  • 防監聽
    • 資料是加密的,所以監聽得到的資料是密文,hacker看不懂。
  • 防偽裝
    • 偽裝分為客戶端偽裝和伺服器偽裝,通訊雙方攜帶證書,證書相當於身份證,有證書就認為合法,沒有證書就認為非法,證書由第三方頒佈,很難偽造
  • 防篡改
    • https對資料做了摘要,篡改資料會被感知到。hacker即使從中改了資料也白搭。

https連線過程

伺服器端需要認證的通訊過程

這裡寫圖片描述

  • 客戶端傳送請求到伺服器端
  • 伺服器端返回證書和公開金鑰,公開金鑰作為證書的一部分而存在
  • 客戶端驗證證書和公開金鑰的有效性,如果有效,則生成共享金鑰並使用公開金鑰加密傳送到伺服器端
  • 伺服器端使用私有金鑰解密資料,並使用收到的共享金鑰加密資料,傳送到客戶端
  • 客戶端使用共享金鑰解密資料
  • SSL加密建立………

客戶端認證的通訊的過程

  • 客戶端需要認證的過程跟伺服器端需要認證的過程基本相同,並且少了最開始的兩步。這種情況都是證書儲存在客戶端,並且應用場景比較少,一般金融才使用,比如支付寶、銀行客戶端都需要安裝證書

後續的問題

  • 怎樣保證公開金鑰的有效性
    • 你也許會想到,怎麼保證客戶端收到的公開金鑰是合法的,不是偽造的,證書很好的完成了這個任務。證書由權威的第三方機構頒發,並且對公開金鑰做了簽名。
  • https的缺點
    • https保證了通訊的安全,但帶來了加密解密消耗計算機cpu資源的問題 ,不過,有專門的https加解密硬體伺服器
  • 各大網際網路公司,百度、淘寶、支付寶、知乎都使用https協議,為什麼?
    • 支付寶涉及到金融,所以出於安全考慮採用https這個,可以理解,為什麼百度、知乎等也採用這種方式?為了防止運營商劫持!http通訊時,運營商在資料中插入各種廣告,使用者看到後,怒火發到網際網路公司,其實這些壞事都是運營商(移動、聯通、電信)乾的,用了https,運營商就沒法插播廣告篡改資料了。

以上內容,來自個人對《圖解HTTP》一書中https通訊部分的理解,加上知乎牛人解答的理解,彙總而成