iOS之網路相關3:HTTPS

語言: CN / TW / HK

這是我參與11月更文挑戰的第6天,活動詳情檢視:2021最後一次更文挑戰

1. HTTP的主要缺點

  • 通訊使用明文,內容可能被竊聽。
  • 不驗證通訊方的身份,因此可能遭遇偽裝。
  • 無法保證報文的完整性,所以可能遭到篡改。

2.什麼是HTTPS?

  • HTTPS = HTTP + 加密 + 認證 + 完整性保護,所以把添加了加密及認證機制的HTTP稱為HTTPS。
  • HTTPS並不是應用層的新協議,只是身披SSL外殼的HTTP協議。
  • 通常情況下,HTTP直接和TCP通訊。當使用SSL時,則先和SSL通訊再由它同TCP通訊。
  • SSL時獨立於HTTP的協議,在很多方面都有使用。它採用一種叫做公開金鑰加密的加密處理方法。

3.HTTPS的加密方式

  • 共享金鑰加密(對稱金鑰加密):加密和解密同用一個金鑰的方式。
  • 公開金鑰加密(非對稱加密):這種方式存在兩把金鑰,私有金鑰和公開金鑰。 HTTPS採用公開金鑰加密和共享金鑰加密混合的加密機制。由於公開金鑰加密機制比較複雜,在通訊時使用處理效率較低。因此HTTPS先採用公開金鑰加密將共享金鑰傳送給對方,然後使用共享加密方式通訊。

公開金鑰存在一個問題:無法證明金鑰本身是否是真實存在的。為了解決這個問題,使用數字證書認證(CA)和相關機關辦法的公開金鑰證書。

869753-be03f5bc13cae67a.png

4. HTTPS的安全通訊流程

    1. 客戶端向伺服器發起https請求開始SSL通訊。
    1. 伺服器用自己的公鑰登入數字證書認證機構,獲取公鑰證書(伺服器公鑰+數字證書認證機構的數字簽名)。
    1. 伺服器把公鑰證書傳送給客戶端。
    1. 客戶端獲取公鑰證書後:
      1. 通過數字證書認證機構驗證公鑰證書是否有效受信。
      1. 客戶端驗證公鑰證書有效受信後,生成一段隨機數密碼並用公鑰證書中的公鑰加密(也就是伺服器公鑰)。
      1. 將帶有加密隨機數的資訊傳送給伺服器。
    1. 伺服器接收到客戶端的訊息後:
      1. 用私鑰將資訊解密去除隨機數密碼。
      1. 把內容功過隨機數進行對稱加密後,傳送給後客戶端。
    1. 客戶端通過隨機數解密伺服器傳過來的加密資訊。
    1. 之後所有的通訊資料將由之前客戶端生成的隨機數密碼利用對稱加密演算法進行加密解密。 HTTP一般使用的加密演算法和HASH演算法如下:
  • 非對稱加密演算法:RSA,DSA/DSS
  • 對稱加密演算法:AES,RC4,3DES
  • HASH演算法:MD5,SHA1,SHA256

5. SSL的位置

SSL介於HTTP應用層和TCP傳輸層之間。應用層資料不再直接傳遞給傳輸層,而是傳遞給SSL層,SSL層對從應用層收到的資料進行加密,然後傳遞給傳輸層。

869753-95c26edacda3e496.png