談談HTTPS安全認證,抓包與反抓包策略

協議是指計算機通訊網絡中兩臺計算機之間進行通訊所必須共同遵照的規定或規則,超文本傳輸協議(HTTP)是一種通訊協議,它容許將超文本標記語言(HTML)文檔從Web服務器傳送到客戶端的瀏覽器。HTTP協議,即超文本傳輸協議是一種詳細規定了瀏覽器和萬維網服務器之間互相通訊的規則,經過因特網傳送萬維網文檔的數據傳送協議。HTTP協議是用於從萬維網服務器傳輸超文本到本地瀏覽器的傳送協議。它可使瀏覽器更加高效,使網絡傳輸減小。它不只保證計算機正確快速地傳輸超文本文檔,還肯定傳輸文檔中的哪一部分,以及哪部份內容首先顯示(如文本先於圖形)等。衆所周知,HTTP是一個無狀態的應用層協議,由請求和響應構成,是一個標準的客戶端服務器模型。在Internet中全部的傳輸都是經過TCP/IP進行的。HTTP協議做爲TCP/IP模型中應用層的協議也不例外。HTTP協議一般承載於TCP協議之上,有時也承載於TLS或SSL協議層之上,這個時候,就成了咱們常說的HTTPS。以下圖所示:
file算法

而你們都很清楚TCP/IP共分爲四層:應用層、傳輸層、網絡層、數據鏈路層; 爲何TCP/IP要分紅四層呢?意思何在呢?其實主要緣由是因爲分層可以解耦,動態替換層內協議,不一樣層各司其責: 應用層:向用戶提供應用服務時的通信活動(ftp,dns,http) 傳輸層:網絡鏈接中兩臺計算機的數據傳輸(tcp、udp) 網絡層:處理網絡上流動的數據包,經過怎樣的傳輸路徑把數據包傳送給對方(ip) 數據鏈路層:與硬件相關的網卡、設備驅動等等。瀏覽器

可是HTTP也有幾個較爲顯著的缺點:安全

  • 通訊使用明文,內容容易被抓包泄露
  • 不驗證通訊方的身份,所以有可能遭遇假裝
  • 沒法證實報文的完整性,因此有可能遭到篡改

正是因爲這幾個顯著的缺點存在,因此HTTPS應運而生。https俗稱超文本傳輸安全協議。是以安全爲目標的HTTP通道,簡單講是HTTP的安全版。即HTTP下加入SSL層,HTTPS的安全基礎是SSL,所以加密的詳細內容就須要SSL。HTTPS是在HTTP的基礎上加上一層安全層,用於數據加密、解密、身份認證,即服務器

  • HTTP + 加密 + 認證 = HTTPS

說到加密,開發人員基本都不會陌生。咱們日常開發中接觸形形色色的加密算法,簡單來講分爲對稱加密算法與非對稱加密算法以及散列算法。算法的區別在哪呢?咱們能夠這麼來理解三種算法的區別:微信

  • 對稱加密算法:加密和解密數據使用同一個密鑰。這種加密方式的特色是速度很快。
  • 非對稱加密算法:數據用公鑰加密後必須用私鑰解密,數據用私鑰加密後必須用公鑰解密。這種加密方式的特色是速度慢,CPU 開銷大。
  • 散列算法:沒有祕鑰,目前沒法反向解密。(暴力破解除外)

咱們爲何須要加密?咱們平常生活中登陸密碼或者各類隱私信息都須要進行加密保存防止信息泄露。那咱們接下來來看看這三種算法類型分別有什麼樣的算法呢:網絡

  • 對稱加密算法:目前主流算法有DES算法,3DES算法,AES算法
  • 非對稱加密算法:目前主流算法有RSA算法
  • 散列算法:目前主要以MD5和SHA-1算法爲主

CA證書:CA證書CA證書內含服務端公鑰與私鑰,使用hash散列函數計算明文信息的信息摘要,而後採用CA證書內含的私鑰對信息摘要進行加密最終生成簽名。即:證書 = 公鑰 + 簽名 +申請者和頒發者的信息。客戶端中由於在操做系統中就預置了CA的公鑰,因此支持解密簽名。tcp

知道了上面這些基礎知識,接下來咱們一塊兒瞭解HTTPS如何進行安全認證,首先主要有單向認證和雙向認證兩種認證方式:函數

單向認證
file
從上圖能夠看出,單向認證過程以下:工具

  • 客戶端向服務端發送SSL協議版本號、加密算法種類、隨機數等信息。
  • 服務端給客戶端返回SSL協議版本號、加密算法種類、隨機數等信息,同時也返回服務器端的證書,即公鑰證書
  • 客戶端使用服務端返回的信息驗證服務器的合法性,包括:網站

    1. 證書是否過時
    2. 發行服務器證書的CA是否可靠
    3. 返回的公鑰是否能正確解開返回證書中的數字簽名
    4. 服務器證書上的域名是否和服務器的實際域名相匹
    5. 驗證經過後,將繼續進行通訊,不然,終止通訊
  • 客戶端向服務端發送本身所能支持的對稱加密方案,供服務器端進行選擇
  • 服務器端在客戶端提供的加密方案中選擇加密程度最高的加密方式。
  • 服務器將選擇好的加密方案經過明文方式返回給客戶端
  • 客戶端接收到服務端返回的加密方式後,使用該加密方式生成產生隨機碼,用做通訊過程當中對稱加密的密鑰,使用服務端返回的公鑰進行加密,將加密後的隨機碼發送至服務器
  • 服務器收到客戶端返回的加密信息後,使用本身的私鑰進行解密,獲取對稱加密密鑰。 在接下來的會話中,服務器和客戶端將會使用該密碼進行對稱加密,保證通訊過程當中信息的安全。

HTTPS雙向認證
單向認證客戶端只須要認證服務端,而在雙向認證中服務端一樣須要對客戶端進行認證: 雙向認證具體過程以下:
file

  • 客戶端向服務端發送SSL協議版本號、加密算法種類、隨機數等信息。
  • 服務端給客戶端返回SSL協議版本號、加密算法種類、隨機數等信息,同時也返回服務器端的證書,即公鑰證書
  • 客戶端使用服務端返回的信息驗證服務器的合法性,包括:

    1. 證書是否過時
    2. 發行服務器證書的CA是否可靠
    3. 返回的公鑰是否能正確解開返回證書中的數字簽名
    4. 服務器證書上的域名是否和服務器的實際域名相匹配
    5. 驗證經過後,將繼續進行通訊,不然,終止通訊
  • 服務端要求客戶端發送客戶端的證書,客戶端會將本身的證書發送至服務端
  • 驗證客戶端的證書,經過驗證後,會得到客戶端的公鑰
  • 客戶端向服務端發送本身所能支持的對稱加密方案,供服務器端進行選擇
  • 服務器端在客戶端提供的加密方案中選擇加密程度最高的加密方式
  • 將加密方案經過使用以前獲取到的公鑰進行加密,返回給客戶端
  • 客戶端收到服務端返回的加密方案密文後,使用本身的私鑰進行解密,獲取具體加密方式,然後,產生該加密方式的隨機碼,用做加密過程當中的密鑰,使用以前從服務端證書中獲取到的公鑰進行加密後,發送給服務端
  • 服務端收到客戶端發送的消息後,使用本身的私鑰進行解密,獲取對稱加密的密鑰,在接下來的會話中,服務器和客戶端將會使用該密碼進行對稱加密,保證通訊過程當中信息的安全。

可是HTTPS即便號稱超文本傳輸安全協議,也是很容易被抓包的,通常能夠經過Charles、fildder等工具做爲中間層,進行身份的假裝:對客戶端假裝成服務端,對服務端假裝成客戶端: 截獲客戶端的HTTPS請求,假裝成客戶端去向服務端發送HTTPS請求 接受服務端返回,用本身的證書假裝成服務端向客戶端發送數據內容。

具體過程以下圖所示:
file
反抓包策略 那咱們應該如何防止被抓包呢?可使用SSL-Pinning技術來反抓包。由於被抓包主要是因爲僞造了一個假的服務端證書給了客戶端,音粗能夠同時在客戶端也保存一份服務端的證書,就能夠知道數據來源的證書是否是真實服務端來源了。SSL-pinning有兩種方式: 證書鎖定(Certificate Pinning) 公鑰鎖定(Public Key Pinning)

證書鎖定
證書鎖定是SSL/TLS加密的額外保證手段。它會將服務器的證書公鑰預先保存在客戶端。在創建安全鏈接的過程當中,客戶端會將預置的公鑰和接受的證書作比較。若是一致,就創建鏈接,不然就拒絕鏈接。在客戶端設置證書只容許設置指定域名的證書,而不接受操做系統或瀏覽器內置的CA根證書對應的任何證書。

公鑰鎖定
HTTP公鑰鎖定是HTTPS網站防止攻擊者CA機構錯誤簽發的證書進行中間人攻擊的一種安全機制,用於預防CA遭受入侵或其餘會形成CA簽發未受權證書的狀況。採用公鑰鎖定時,網站會提供已受權公鑰的哈希列表,指示客戶端在後續通信中只接受列表上的公鑰。提取證書中的公鑰並內置到客戶端中,經過與服務器對比公鑰值來驗證鏈接的正確性。

HTTPS和HTTP的區別
https協議須要到ca申請證書,通常免費證書不多,須要交費。 http是超文本傳輸協議,信息是明文傳輸,https 則是具備安全性的ssl加密傳輸協議。 http和https使用的是徹底不一樣的鏈接方式用的端口也不同,前者是80,後者是443。 http的鏈接很簡單,是無狀態的。 HTTPS協議是由SSL+HTTP協議構建的可進行加密傳輸、身份認證的網絡協議,要比http協議安全。

HTTPS解決的問題
防止第三方冒充服務器。 防止第三方攔截通訊報文,竊取通訊中請求報文、響應報文的內容。 防止第三方攔截通訊報文,篡改報文內容。

文章原創於公衆號:程序猿周先森。本平臺不定時更新,喜歡個人文章,歡迎關注個人微信公衆號。
file

本文由博客一文多發平臺 OpenWrite 發佈!

相關文章
相關標籤/搜索