概敘
????????HTTPS(Secure Hypertext Transfer Protocol)即安全超文本傳輸協議,是一個安全通信通道。用于計算機網絡的安全通信,已經在互聯網得到廣泛應用。
????????HTTPS 是基于 HTTP 的擴展,其相當于 HTTP協議+SSL(安全套接層)/TLS(安全傳輸層協議)協議加密。因此 HTTPS 也常指 HTTP over SSL 或 HTTP over TLS。
HTTP 的缺點:
- HTTP 通信使用明文,內容可能會被竊聽。
- HTTP 無法驗證報文的完整性,所以有可能遭到篡改。
- HTTP 不驗證通信方的身份,有可能遭遇偽裝。
- HTTP 通信使用明文,且不驗證通信方的身份,會被中間人挾持。
????????HTTPS 與 HTTP 的區別:HTTP 協議的數據傳輸是通過明文的形式做傳輸,即使約定了加密方式,但是第一次傳輸的時候還是明文;鑒于此,HTTPS使用的是非對稱加密,為秘鑰的傳輸外層再做一層保護,非對稱加密的一組秘鑰對中,包含一個公鑰和一個私鑰。明文既可以用公鑰加密,用私鑰解密;也可以用私鑰加密,用公鑰解密。
- HTTPS 協議需要到 CA 申請證書;
- HTTP 是明文傳輸,HTTPS 則是具有安全性的 SSL 加密傳輸協議;
- HTTP 和 HTTPS 使用的是完全不同的連接方式,端口也不一樣。前者是 80,后者是 443;
- HTTP 的連接是無狀態的,HTTPS 協議是由 SSL+HTTP 協議構建的可進行加密傳輸、身份認證的網絡協議,比 HTTP 更安全。
????????總的來說:HTTPS 目前是最流行的 HTTP 安全形式。使用 HTTPS 時,所有的 HTTP 請求和響應數據在發送到網絡之前,都要進行加密。
????????HTTPS 在 HTTP 下面提供了一個傳輸級的密碼安全層: SSL 和 TLS。
HTTPS解決的問題是什么?
????????答:信任主機的問題
????????采用https的服務器必須從CA?(Certificate Authority)申請一個用于證明服務器用途類型的證書。該證書只有用于對應的服務器的時候,客戶端才信任此主機。所以目前所有的銀行系統網站,關鍵部分應用都是https 的。客戶通過信任該證書,從而信任了該主機。其實這樣做效率很低,但是銀行更側重安全。這一點對我們沒有任何異議,我們的服務器,采用的證書不管是自己發布的還是從公眾的地方發布的,其客戶端都是自己人,所以我們也就肯定信任該服務器。
????????通訊過程中的數據的泄密和被篡改
????????1. 一般意義上的https,就是服務器有一個證書。
????????????????a) 主要目的是保證服務器就是他聲稱的服務器,這個跟第一點一樣。
????????????????b)服務端和客戶端之間的所有通訊,都是加密的。
????????????????i. 具體講,是客戶端產生一個對稱的密鑰,通過服務器的證書來交換密鑰,即一般意義上的握手過程。
????????????????ii. 接下來所有的信息往來就都是加密的。第三方即使截獲,也沒有任何意義,因為他沒有密鑰,當然篡改也就沒有什么意義了。
????????2. 少許對客戶端有要求的情況下,會要求客戶端也必須有一個證書。
????????????????a) 這里客戶端證書,其實就類似表示個人信息的時候,除了用戶名/密碼,還有一個CA?認證過的身份。因為個人證書一般來說是別人無法模擬的,所以這樣能夠更深的確認自己的身份。
????????????????b) 目前少數個人銀行的專業版是這種做法,具體證書可能是拿U盤(即U盾)作為一個備份的載體。
SSL 與 TLS 概述
????????SSL(Secure Socket Layer)即,位于可靠的面向連接的網絡層協議和應用層協議之間的一種協議層。SSL 通過互相認證、使用數字簽名確保完整性、使用加密確保私密性,以實現客戶端和服務器之間的安全通訊。
SSL 協議可分為兩層:
- SSL 記錄協議(SSL Record Protocol):它建立在可靠的傳輸協議(如 TCP)之上,為高層協議提供數據封裝、壓縮、加密等基本功能的支持。
- SSL 握手協議(SSL Handshake Protocol):它建立在 SSL 記錄協議之上,用于在實際的數據傳輸開始前,通訊雙方進行身份認證、協商加密算法、交換加密密鑰等。
????????TLS:安全傳輸層協議(TLS)用于在兩個通信應用程序之間提供保密性和數據完整性。TLS 記錄協議用于封裝各種高層協議。作為這種封裝協議之一的握手協議允許服務器與客戶機在應用程序協議傳輸和接收其第一個數據字節前彼此之間相互認證,協商加密算法和加密密鑰。該協議由兩層組成: TLS 記錄協議(TLS Record)和 TLS 握手協議(TLS Handshake)
????????SSL/TLS 協議為了解決 HTTP 協議的缺點,希望達到:
- 所有信息都是加密傳播,第三方無法被竊聽。
- 具有校驗機制,一旦被篡改,通信雙方立刻會發現。
- 配備身份證書,方式身份被冒充。
????????SSL 是一個二進制協議,與 HTTP 完全不同,其流量是承載在另一個端口上的(通常是 443),如果 SSL 和 HTTP 的流量都從 80 端口到達,大部分 web 服務器會將二進制 SSL 流量理解為錯誤的 HTTP 并關閉連接。
SSL證書
????????SSL證書是一種數字證書,可以由組織或個人購買,并允許Web服務器和瀏覽器之間的安全連接。它通過將加密密鑰綁定到組織的詳細信息來做到這一點。
????????證書包含有關證書持有者的姓名、證書序列號和到期日期、證書持有者的公鑰副本以及證書頒發機構的數字簽名等信息。這會對網站進行身份驗證,證明它確實是它聲稱的網站,而不是冒充該網站的黑客。
????????在服務器向客戶端發送公鑰這一過程中,客戶端可能會收到黑客假冒服務器發送的假的公鑰。為了安全考慮,就需要用到 SSL 證書了。在通信時,服務器將證書發送給客戶端,客戶端會對證書的真偽進行校驗,保證了安全。
????????從本質上講,它會驗證該站點是否如其所說。
SSL 與 TLS 二者之間關系
????????TLS 是 SSL3.0 的后續版本。TLS 與 SSL3.0 之間存在著顯著的差別,主要是它們所支持的加密算法不同,所以 TLS 與 SSL3.0 不能互操作。
????????SSL 是 Netscape 開發的專門用戶保護 Web 通訊的,目前版本為 3.0。最新版本的 TLS 是 IETF(Internet Engineering Task Force,Internet 工程任務組)制定的一種新的協議。最新版本的 TLS1.0,它建立在 SSL3.0 協議規范之上,是 SSL3.0 的后續版本。兩者差別極小,可以理解為 SSL3.1。
通過證書防止中間人攻擊
????????中間人獲取信息后,模擬客戶端和服務器,并使用偽造的服務器證書發送給客戶端的情況,是一種常見的中間人攻擊手法。
????????為了避免這種情況,SSL/TLS 協議和瀏覽器等客戶端采取了多種措施:
證書鏈驗證
????????客戶端會驗證服務器證書是否由受信任的證書頒發機構(CA)簽署。證書鏈驗證過程如下:
服務器提供的證書會包括一個完整的證書鏈,根證書在客戶端的受信任證書庫中。
客戶端驗證從服務器證書到根證書的整個鏈條。如果任意一個證書不匹配或無效,連接將被終止。
證書透明度(Certificate Transparency, CT)
????????這是一個公開的日志系統,所有頒發的證書都會被記錄在透明日志中。客戶端可以檢查收到的證書是否在這些日志中,并驗證其合法性。通過這種方式,可以防止惡意CA頒發偽造的證書。
在線證書狀態協議(Online Certificate Status Protocol, OCSP)
????????OCSP用于檢查證書是否被吊銷。客戶端在連接服務器時,會請求OCSP響應,確認證書仍然有效。如果證書被吊銷,客戶端將拒絕連接。
HTTP嚴格傳輸安全(HTTP Strict Transport Security, HSTS)
????????HSTS允許服務器告知瀏覽器只能通過HTTPS連接,并拒絕所有HTTP連接。這可以防止降級攻擊,中間人無法通過強制降級到HTTP來進行中間人攻擊。
證書釘扎(Certificate Pinning)
????????證書釘扎將特定服務器的證書或公鑰綁定到客戶端,確保只有特定的證書或公鑰可以用于該服務器。即使中間人使用偽造的證書,也無法通過驗證。
域名系統安全擴展(DNSSEC)
????????DNSSEC通過對DNS數據進行簽名,確保DNS響應的真實性和完整性,防止中間人篡改DNS記錄并進行流量劫持。
雙因素認證(2FA)
????????即使在建立安全連接后,中間人成功截獲了會話,雙因素認證提供了額外的安全層,防止未經授權的訪問
HTTPS如何加密數據
????????對安全或密碼學基礎有了解的同學,應該知道常見的加密手段。一般來說,加密分為對稱加密、非對稱加密(也叫公開密鑰加密)。
????????1.客戶端瀏覽器和服務器,通過三次握手,創建TCP鏈接。? ? ? ? ? ? ?
? ? ? ? 2.瀏覽器請求https鏈接,服務端返回證書公鑰。
? ? ? ? 3.瀏覽器產生隨機數[key1],作為后面傳輸數據時的對稱加密密鑰,并用證書公鑰非對稱加密隨機數傳給服務器。(上圖中234三步所示)
? ? ? ? 4.服務器收到隨機數[key1]密文,用證書私鑰非對稱解密,同時服務器將解密到的隨機數[key
1]作為后面傳輸數據時的對稱加密密鑰[key1],[key1]保存在服務端,同時服務端產生一個隨機數random2,服務端用[key1]對random2進行對稱加密,加密后的密文和明文返回給瀏覽器。
? ? ? ? 5.瀏覽器收到密文,用本地的密鑰[key1],進行對稱解密,解密到的明文和服務端傳過來的明文比對,一致,則說明,身份驗證完成。后面即可用本地的密鑰[key1]進行數據的對稱加密和解密。
? ? ? ? 6.SSL/TLS的4次握手完成,即可進行https通信。
? ? ? ? 7.瀏覽器將請求數據用本地的密鑰[key1]進行對稱加密,發給服務器。
? ? ? ? 8.服務器收到瀏覽器的加密請求,用本地的密鑰[key1]進行對稱解密,同時將響應也用本地的密鑰[key1]進行對稱加密,發給瀏覽器。
? ? ? ? 9.瀏覽器收到服務器的加密響應,用本地的密鑰[key1]進行對稱解密,然后完成瀏覽器的數據渲染展示。
? ? ? ? 10.https通信結束,瀏覽器發起TCP4次握手斷開TCP鏈接。
HTTPS 下瀏覽器訪問一個網站的全過程
????????https的整個通信過程可以分為兩大類:證書驗證和數據傳輸階段。數據傳輸階段又分為非對稱加密和對稱加密兩個階段。
????????具體流程如下:
- 首先客戶端請求 https 網址,然后連接到 Server 的 443 端口(https 默認端口)。
- 采用 https 協議的服務器必須要有一套數字 CA 證書。頒發證書的同時會產生一個私鑰和公鑰。私鑰由服務端自己保存,不可泄漏。公鑰則附加在證書中,可以公開。證書本身附帶一個電子簽名,可以用來驗證證書的完整性和真實性,可以防止證書被篡改。
- 服務器響應客戶端請求,將證書傳遞給客戶端。證書包含公鑰和大量其他的信息,比如證書頒發機構信息、公司信息和證書有效期等。
- 客戶端解析證書并對其進行驗證,如果證書不是可信的機構頒布,或者證書的域名與實際域名不一致,或證書已經過期,就會向訪問者顯示一個警告。如果證書沒有問題,客戶端就會從服務器證書中取出服務器的公鑰A,并生成一個隨機碼KEY,并使用公鑰對其進行加密。
- 客戶端會把加密后的隨機碼KEY發送給服務器,作為后面對稱加密的密鑰。
- 服務器在收到隨機碼KEY之后會使用私鑰B將其解密。經過以上這些步驟,客戶端和服務器終于建立了安全的連接,接下來可以使用對稱加密進行通信了。
- 服務器使用密鑰(隨機碼KEY)對數據進行對稱加密并發送給客戶端,客戶端使用相同的密鑰解密數據。
- 雙方使用對稱加密傳輸所有的數據。