http、https、websocket(二)

https

https 概念

超文本傳輸安全協議(英語:Hypertext Transfer Protocol Secure,縮寫:HTTPS,常稱爲HTTP over TLS,HTTP over SSL或HTTP Secure)是一種經過計算機網絡進行安全通訊的傳輸協議。HTTPS經由HTTP進行通訊,但利用SSL/TLS來加密數據包。HTTPS開發的主要目的,是提供對網站服務器的身份認證,保護交換數據的安全與完整性。這個協議由網景公司(Netscape)在1994年首次提出,隨後擴展到互聯網上。歷史上,HTTPS鏈接常常用於萬維網上的交易支付和企業信息系統中重要信息的傳輸。在2000年代晚期和2010年代早期,HTTPS開始普遍使用於保護全部類型網站上的網頁真實性,保護帳戶和保持用戶通訊,身份和網絡瀏覽的私密性。算法

http 與 https 區別

http 缺點

  • 通訊使用明文(不加密),內容可能會被盜用
  • 不驗證通訊方的身份,所以有可能遭遇假裝
  • 沒法證實報文的完整性,因此有可能已遭篡改

https 結構

http 與 https 區別

HTTP + 加密 + 認證 + 完整性保護 = HTTPS

加密

和http相比,https只多了一層保障數據安全的TLS/SSL,TLS/SSL全稱安全傳輸層協議Transport Layer Security, 是介於TCP和HTTP之間的一層安全協議,不影響原有的TCP協議和HTTP協議,因此使用HTTPS基本上不須要對HTTP頁面進行太多的改造。瀏覽器

對稱加密

對稱就是指加密和解密時使用的密鑰都是同一個,是「對稱」的,對稱加密看上去好像完美地實現了機密性,但其中有一個很大的問題:如何把密鑰安全地傳遞給對方,術語叫「密鑰交換」。由於在對稱加密算法中只要持有密鑰就能夠解密。若是你和網站約定的密鑰在傳遞途中被他人竊取,那以後就能隨意解密收發的數據,通訊過程也就沒有機密性可言了。安全

非對稱加密

非對稱加密(也叫公鑰加密算法),它有兩個密鑰,一個叫「公鑰」(public key),一個叫「私鑰」(private key)兩個密鑰是不一樣的,「不對稱」,公鑰能夠公開給任何人使用,而私鑰必須嚴格保密。公鑰和私鑰有個特別的「單向」性,雖然均可以用來加密解密,但公鑰加密後只能用私鑰解密,反過來,私鑰加密後也只能用公鑰解密。非對稱加密能夠解決「密鑰交換」的問題。網站祕密保管私鑰,在網上任意分發公鑰,你想要登陸網站只要用公鑰加密就好了,密文只能由私鑰持有者才能解密。而他人由於沒有私鑰,因此就沒法知道密文。服務器

TLS/SSL工做原理

HTTPS協議的主要功能基本都依賴於TLS/SSL協議,TLS/SSL的功能實現主要依賴於三類基本算法:散列函數 Hash、對稱加密和非對稱加密,其利用非對稱加密實現身份認證和密鑰協商,對稱加密算法採用協商的密鑰對數據加密,基於散列函數驗證信息的完整性。網絡

TLS 與 SSL是同一個東西,1999 年更名:SSL 3 === TLS 1.0函數

認證

公鑰加密方式仍是存在一些問題的。那就是沒法證實公鑰自己就是貨真價實的公開密鑰。好比,正準備和某臺服務器 創建公開密鑰加密方式下的通訊時,如何證實收到的公鑰就是本來預想的那臺服務器發行的公鑰。或許在公鑰傳輸途中,真正的公鑰已經被攻擊者替換掉了。post

爲了解決上述問題,可使用由數字證書認證機構(CA,Certificate Authority)和其相關機關頒發的公開密鑰證書。數字證書認證機構處於客戶端與服務器雙方均可信賴的第三方機構的立場上。網站

首先,服務器的運營人員向數字證書認證機構提出公開密鑰的申請。數字書認證 機構在判明提出申請者的身份以後,會對已申請的公開密鑰作數字簽名,而後分配這個已簽名的公開密鑰,並將該公開密鑰放入公鑰證書後綁定在一塊兒。服務器會將這份由數字證書認證機構頒發的公鑰證書發送給客戶端,以進行公開密鑰加密方式通訊。公鑰證書也可叫作數字證書或直接稱爲證書。加密

接到證書的客戶端可以使用數字證書認證機構的公開密鑰,對那張證書上的數字簽名進行驗證,一旦驗證經過,客戶端即可明確兩件事:計算機網絡

  • 認證服務器的公開密鑰的是真實有效的數字證書認證機構。
  • 服務器的公開密鑰是值得信賴的。此處認證機關的公開密鑰必須安全地轉交給客戶端。使用通訊方式 時,如何安全轉交是一件很困難的事,所以,多數瀏覽器開發商發佈版本時,會事先在內部植入經常使用認證機關的公開密鑰。

HTTPS 的安全通訊機制

https比http安全的地方就是多了個TLS握手過程,經過TLS握手得到加密密鑰最後對數據進行加密後傳輸

TLS握手

TLS握手什麼時候發生?:

  • 每當用戶經過HTTPS導航到網站而且瀏覽器首先開始查詢網站的原始服務器時,就會進行TLS握手。
  • 每當其餘任何通訊使用HTTPS(包括API調用和HTTPS查詢上的DNS)時,也會發生TLS握手。
  • 經過TCP握手打開TCP鏈接後,會發生TLS 握手。

具體流程描述:

  • 客戶端hello:客戶端經過向服務器發送「問候」消息來發起握手。該消息將包括客戶端支持的TLS版本,支持的加密套件以及稱爲「客戶端隨機」的隨機字節字符串。

  • 服務器hello:爲回覆客戶端hello消息,服務器發送一條消息,其中包含服務器的SSL證書,服務器選擇的加密套件和「服務器隨機數」,即服務器生成的另外一個隨機字節串。

  • 客戶端發送公鑰加密的預主密鑰。

  • 服務器用本身的私鑰解密加密的預主密鑰。

    • 客戶端finished:客戶端發送「完成」消息,該消息已用會話密鑰加密。
    • 服務器finished:服務器發送一條用會話密鑰加密的「完成」消息。
  • 握手完成,後續經過主密鑰加解密。

引用文章

juejin.im/post/5af557…

juejin.im/post/5e9b22…

juejin.im/post/5e76bd…

zhuanlan.zhihu.com/p/37738632

juejin.im/post/5e461f…

圖解http

相關文章
相關標籤/搜索