也來聊聊 HTTPS.

前言: 網上聊 HTTPS 的文章已經數都數不過來了吧,厚着臉皮,整理下讀書筆記,結合日常項目的實踐,也來聊聊 HTTPS。瀏覽器

1、爲何須要 HTTPS?

衆所周知,HTTP 協議具備無鏈接、不可靠、盡最大努力的特色,這也爲 HTPP 協議帶來信息竊聽或身份假裝等安全問題。主要體如今幾個方面:安全

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

那要如何作到防止竊聽保護信息呢?最爲普及的就是加密技術。服務器

  • 通訊的加密:用 SSL(Secure Socket Layer,安全套接層)或 TLS(Transport Layer Security,安全層傳輸協議)創建安全通訊線路以後,就能夠在這條線路上進行 HTTP 通訊了。與 SSL/TLS 組合使用的 HTTP 就是 HTTPS,一般 HTTP 直接和 TCP 通訊,當使用 SSL 時,則演變成先與 SSL 通訊,再由 SSL 和 TCP 通訊了,因此 HTTPS 並非一種新的協議。
  • 內容的加密: 對 HTTP 協議傳輸的內容自己加密,即把 HTTP 報文裏所含的內容進行加密處理。

SSL 協議最初是由瀏覽器開發商網景通訊公司率先倡導的,開發過 SSL3.0 以前的版本。IETF 以 SSL3.0 爲基準,後又制定了 TLS1.0、TLS1.1 和 TLS1.2。TSL 是以 SSL爲原型開發的協議,有時會統一稱該協議爲 SSL。當前主流的版本是 SSL3.0 和 TLS1.0。網絡

SSL 不只提供加密處理,並且還使用了一種被稱爲證書的手段,可用於肯定通訊方。阿里雲

2、HTTPS 怎麼來保障通訊安全的?

HTTPS 具備加密、認證以及完整性保護的功能。加密

1. 加密

客戶端和服務端想要進行安全的通訊,首先想到的就是對通訊雙方的內容進行加密處理。客戶端利用「密鑰」加密內容,服務端利用「密鑰」解密內容,反之亦然。這種方式稱爲對稱(共享密鑰)加密。3d

對稱加密客戶端和服務端的「密鑰」是一致的,所以,客戶端和服務端之間的「密鑰」傳輸不可避免,若是「密鑰」在傳輸途中被盜用,那麼加密處理就沒有意義了。blog

那麼如何保護「密鑰」的傳輸安全呢?實踐的思路是非對稱(公開密鑰)加密,服務端擁有 公鑰(public key)+ 私鑰(private key)的密鑰對,公鑰任何人均可以獲取,私鑰只保存在服務端。如下是 SSL 創建安全通訊線路的過程。ip

  1. 服務端將公鑰傳輸給客戶端。
  2. 客戶端經過公鑰加密「密鑰」(客戶端生成)獲得一個加密串並傳輸給服務端。
  3. 服務端根據私鑰解密加密串獲得「密鑰」。
  4. 雙方經過「密鑰」加密傳輸。

非對稱加密「密鑰」的方式很好的保障了「密鑰」的安全傳輸,由於即便傳輸過程當中加密串被盜用了,因爲盜用者沒有私鑰信息,也沒法獲得加密串中的「密鑰」信息。內存

HTTPS 採用對稱(共享密鑰)加密和非對稱(公開密鑰)加密二者並用的混合加密機制。之因此要這麼複雜,是由於非對稱加密的處理速度相較於對稱加密要慢,所以,咱們通常在交換「密鑰」環節使用非對稱加密,以後的創建通訊交換報文階段則使用對稱加密方式。

2. 認證

遺憾的是,非對稱加密傳輸「密鑰」的方式仍然有缺陷,那就是沒法證實服務器公鑰自己就是貨真價實的公鑰。好比,接收到某臺服務器的公鑰,如何證實公鑰就是本來預想的那臺服務器發行的公鑰呢?或許在公鑰傳輸途中,真正的公鑰已經被攻擊者替換掉了。

計算機科學領域的任何問題均可以經過增長一個間接的中間層來解決。

這裏咱們引入的中間層就是數字證書認證機構(CA,Certificate Authority),數字證書認證機構處於客戶端與服務器雙方均可信賴的第三方機構的立場上,如下是數字證書認證機構的業務流程。

  1. 服務器的運營人員向數字證書認證機構提出公開密鑰的申請。
  2. 數字證書認證機構在判明提出申請者的身份以後,會對已申請的公開密鑰作數字簽名,而後分配這個已簽名的公開密鑰,並將該公開密鑰放入公鑰證書。
  3. 服務器將公鑰證書下發給客戶端。
  4. 客戶端使用公鑰證書的公開密鑰,對那張證書上的數字簽名進行驗證,一旦驗證經過,客戶端即可明確兩件事:一,認證服務器的公開密鑰的是真實有效的數字證書認證機構頒發的。二,服務器的公開密鑰是值得信賴的。

HTTPS 中還可使用客戶端證書,以客戶端證書進行客戶端認證,證實服務器正在通訊的對方始終是預料以內的客戶端,其做用跟服務器證書一模一樣。

使用 OpenSSL 這套開源程序,每一個人均可以構建一套屬於本身的認證機構,從而本身給本身頒發服務器證書,但該服務器證書在互聯網上不可做爲證書使用,由於我的並非可信任的三方機構。

3. 完整性保護

基於 SSL 進行 HTTP 通訊時,應用層發送數據會附加一種叫作 MAC(Message Authentication Code)的報文摘要,MAC 可以查知報文是否遭到篡改,從而保護報文的完整性。

3、HTTPS 的通訊過程

CBC 模式(Cipher Block Chaining)又名密碼分組連接模式。在此模式下,將前一個明文塊加密處理後和下一個明文塊作 XOR 運算,使之重疊,而後再對運算結果作加密處理。 對第一個明文塊作加密時,要麼使用前一段密文的最後一塊,要麼利用外部生成的初始向量(initial vector, IV)。

4、HTTPS 的缺點?

處理速度上,因爲 HTTPS 還須要作服務器、客戶端雙方加密及解密過程,所以會消耗 CPU 和內存等硬件資源。

通訊上,和單純 HTTP 通訊相比,SSL 通訊會消耗部分網絡資源。

綜上所述,相較於 HTTP 通訊來講,HTTPS 通訊速度會變慢。針對速度變慢這一問題,並無根本性的解決方案,咱們會使用 SSL 加速器這種(專用服務器)硬件來改善該問題。 該硬件爲 SS通訊專用硬件,相對軟件來說,可以提升數倍 SSL 的計算速度。

另外,SSL 證書的費用開銷也是使用 HTTPS 的考慮因素之一(阿里雲/騰訊雲有免費的 SSL 證書能夠申請使用)。

相關文章
相關標籤/搜索