HTTP HTTPS RSA AES
HTTP是客戶端,瀏覽器或者其他程序與Web服務器之間的應用層通信協議, 簡稱超文本傳輸協議.
HTTPS是HTTP的安全版, 多了一個SSL(安全套接層)或者TSL(安全傳輸層)協議.
HTTP的缺點:
- 通信內容為明文, 沒有經過加密, 內容可能會被竊聽.
- 通信雙方的身份沒有進行驗證, 可能出現偽裝身份的情況.
- 接受的報文完整性無法確定, 可能中途被改動.
HTTPS在HTTP的基礎上增加了:
- 通信加密
- 證書認證
- 完整性保護(SHA-2: 摘要信息)
首先要明白的是, HTTPS并非一個新的協議, 而是在HTTP的通信接口部分采用了SSL協議來實現的:
可以看出SSL是獨立于HTTP的協議, 同樣也可用于其他協議的加密.
HTTPS采用混合加密機制
含有對稱加密, 非對稱加密, 單向加密
HTTPS的握手機制
-
客戶端發起https請求
用戶發出一個https請求, 連接到服務端的443端口
-
服務端的配置
采用https協議的服務器必須要有一套數字證書, 可以自己制作, 也可以向相關組織申請, 區別就是自己頒布的證書需要客戶端驗證通過, 才可以繼續訪問, 而使用受信任的組織申請的證書則不會彈出提示頁面
-
傳送證書(公鑰)
這個證書其實就是公鑰(其實這個就是非對稱加密產生的公鑰), 包含了很多信息, 如證書的頒發機構, 過期時間等.
-
客戶端解析證書
這里是由客戶端的SSL(TSL)來完成的, 首先會檢驗公鑰是否有效, 如果發現異常, 則會彈出一個警告框, 提示證書存在問題, 如果證書沒有問題那么就生成一個隨機值(對稱加密生成的私鑰), 然后使用證書對該隨機值進行加密(使用非對稱產生的公鑰加密對稱加密生成的私鑰保證了私鑰的安全性).
-
傳送加密信息
這里傳送的是用證書加密后的隨機值, 目的就是讓服務端得到這個隨機值(服務端獲取到和客戶端一樣的私鑰), 以后客戶端和服務端的通信就可以通過這個隨機值來進行加密解密了.
-
服務端解密信息
服務端使用生成證書時產生的私鑰解密, 得到了客戶端傳來的隨機值(對稱加密產生的私鑰), 然后把響應內容通過該隨機值進行對稱加密. 這樣服務端和客戶端都有私鑰, 就能進行加密和解密了.
-
傳輸加密后的信息
這部分信息是服務端使用私鑰加密后的信息, 可以在客戶端利用私鑰被還原.
-
客戶端解密信息
客戶端使用之前生成的私鑰來解密服務端傳來的加密信息, 獲取正確內容, 整個過程第三方即使獲取了數據, 也無法解密.
HTTPS常見攻擊方式:
- 降級攻擊(SSL剝離攻擊)
- 解密攻擊(明文, 證書偽造)
- 協議漏洞, 實現方法的漏洞, 配置不嚴格
ps: 關于HTTPS也可以被charles抓包獲取被加密的數據的問題, 這個是由于客戶端本身安裝了偽造的證書, 相當于是中間人攻擊, 這個問題, 就是用戶問題, 無法去避免的.
RSA
RSA算法是公開密鑰系統的代表, 采用公鑰加密, 私鑰加密, 是非對稱加密, 安全性極高. 但是加解密速度慢, 不適合大量數據加密.
AES
AES是對稱加密, 在密鑰管理方面, 要求通信前雙方都有私鑰才能進行加解密, 安全性沒有RSA高, 但是加解密速度要優于RSA, 適合大量數據加密.
在網絡傳輸數據的過程中, 如果使用AES對稱加密機制對傳輸數據加密, 同時使用RSA不對稱加密機制來傳輸AES的密鑰, 就可以綜合發揮AES和RSA的優點同時避免它們的缺點來實現一種加密方案了.
具體過程是先由接收方創建RSA密鑰對, 接收方通過網絡發送RSA公鑰到發送方, 同時保存RSA私鑰. 而發送方創建AES密鑰, 并利用該AES密鑰加密待傳送的明文數據, 同時使用接受的RSA公鑰加密AES密鑰, 最后把用RSA公鑰加密后的AES密鑰同密文一起通過網絡發送給接收方. 當接受方收到這個被加密的AES密鑰和密文后, 首先調用接收方保存的RSA私鑰, 并用該私鑰解密被RSA公鑰加密的AES的密鑰, 得到AES密鑰, 最后用該AES密鑰解密密文得到明文.
其實這個過程和HTTPS的請求過程有很大的相似, 可以說是受這個的啟發了. 在企業級開發中, 可以作為加密方案.