HTTPS,你不知道的事兒

what is https?

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

看到上面定義,咱們大體也明白了HTTPS其實就是一個通過加密後的HTTP,具備更高的安全性。所以咱們就須要瞭解一下通過加密的HTTPS是如何工做的?git

加密算法

筆者目前所瞭解到的算法歸爲三類:github

  • 對稱加密算法

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

    • 加密須要兩個密鑰:公鑰(publickey)、私鑰(privatekey)
    • 公鑰加密,私鑰才能解密
    • 保密性好
    • 加密、解密過程較慢、耗時多
    • 適合對少許數據加密
    • 常見算法有:RSA、ECC、DSA等等
  • Hash算法加密服務器

    • 單向加密
    • 經過Hash算法對數據加密生成惟一Hash值,此值沒法計算出原來的數據
    • 頻繁應用於數據完整性檢驗
    • 經常使用算法有:SHA、MD二、MD四、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決定採用對稱加密算法來加密解密數據,使用非對稱加密算法加密解密對稱算法密鑰,以確保通訊安全。

關於做者

相關文章
相關標籤/搜索