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如何工做前,我須要瞭解兩個概念:性能
密鑰
證書
- 證書是一個許可證,用來證實這個證書的可信賴的
- 證書中可能內置密鑰
- 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決定採用對稱加密算法來加密解密數據,使用非對稱加密算法加密解密對稱算法密鑰,以確保通訊安全。
關於做者