HTTPS,你不知道的事兒

碼無止境發表於2016-09-29

what is https?

HTTPS(全稱:Hyper Text Transfer Protocol over Secure Socket Layer),是以安全為目標的HTTP通道,簡單講是HTTP的安全版。即HTTP下加入SSL層,HTTPS的安全基礎是SSL,因此加密的詳細內容就需要SSL。

看到上面定義,我們大致也明白了HTTPS其實就是一個經過加密後的HTTP,具有更高的安全性。因此我們就需要了解一下經過加密的HTTPS是如何工作的?

加密演算法

筆者目前所瞭解到的演算法歸為三類:

  • 對稱加密

    • 對稱密碼編碼技術
    • 編碼和解碼採用相同描述字元(加密、解密採用相同金鑰)
    • 對稱加密使用簡單
    • 金鑰較短
    • 加密、解密過程較快、耗時短
    • 常見演算法有:DES、3DES、IDEA、AES、RC4等等
  • 非對稱加密

    • 加密需要兩個金鑰:公鑰(publickey)、私鑰(privatekey)
    • 公鑰加密,私鑰才能解密
    • 保密性好
    • 加密、解密過程較慢、耗時多
    • 適合對少量資料加密
    • 常見演算法有:RSA、ECC、DSA等等
  • Hash演算法加密

    • 單向加密
    • 通過Hash演算法對資料加密生成唯一Hash值,此值無法計算出原來的資料
    • 頻繁應用於資料完整性檢驗
    • 常用演算法有:SHA、MD2、MD4、MD5等等

how to work

在弄清HTTPS如何工作前,我需要了解兩個概念:

金鑰

  • 加密或解密都需要一個金鑰,正如開門或鎖門都需要一把鑰匙
  • Java中金鑰由KeyGenerator或KeyPairGenerator生成的
  • 對稱金鑰(KeyGenerator生成的)

    • 使用同一個金鑰加密或加密
  • 非對稱金鑰(KeyPairGenerator生成的)

    • 公鑰(pulickey)廣泛用做傳播,主要用做加密,私鑰(privatekey)用做解密(公鑰加密後的資料只有私鑰才能解密)

證照

  • 證照是一個許可證,用來證明這個證照的可信賴的
  • 證照中可能內建金鑰
  • android系統內建了很多證照,證照之間存在一定信任關係,信任是巢狀的,為了確保金鑰的更高安全性

瞭解上面兩個概念後,接下來我們來了解下HTTPS如何安全通訊?前面在定義HTTPS時講到HTTPS是一種加密的HTTP,為了更高的安全性,沒錯,金鑰和證照正是特定設計來實現HTTPS安全通訊的。

說到安全通訊,我們可能先想到對稱加密演算法,思路如下:

  • 將資料加密
  • 將加密後的資料和金鑰同時傳給伺服器
  • 伺服器利用傳來的金鑰解密資料

以上這種方案存在很大漏洞,假如加密後的資料和金鑰被黑客給截獲,黑客拿著金鑰直接把加密後的資料給解密了,這樣資料就洩漏出去了。

既然對稱演算法不行,那就來試試非對稱演算法,思路如下:

  • 伺服器將公鑰發給客戶端
  • 客戶端將資料採用公鑰加密然後傳送給伺服器
  • 伺服器收到客戶端加密資料,用私鑰解密資料

以上這個方案貌似不錯,看過前面加密演算法說明的童鞋應該清楚非對稱演算法有缺陷,就是加密、解密過程較慢、耗時多,影響使用者體驗。

那有木有更好的方案呢?必須有啦~HTTPS最終採用的安全通訊方案,大家看清楚啦

思路如下:

  • 伺服器生成一對非對稱加密金鑰:公鑰(publickey)、私鑰(privatekey)
  • 伺服器將公鑰(publickey)傳送給客戶端
  • 客戶端生成對稱加密金鑰(clientkey),利用clientkey給資料加密
  • 客戶端使用伺服器傳來的公鑰(publickey)給clientkey進行加密、此時clientkey是安全的,因為只有伺服器才有私鑰(private)能解密它
  • 客戶端傳送用clientkey加密過的資料和用公鑰(publickey)加密過的clientkey給伺服器
  • 伺服器使用私鑰(privatekey)解密用公鑰(publickey)加密過的clientkey,得到真的clientkey
  • 使用clientkey解密資料,這樣資料就安全地從客戶端傳給伺服器了。

總結

由於對稱加密演算法比非對稱加密演算法效率高、效能好,https決定採用對稱加密演算法來加密解密資料,使用非對稱加密演算法加密解密對稱演算法金鑰,以確保通訊安全。

關於作者

相關文章