轉自:https://www.jianshu.com/p/bf58cf32dd9d
http://www.javashuo.com/article/p-decniipi-q.htmlhtml
客戶端發起https請求
用戶發出一個https請求, 鏈接到服務端的443端口安全
服務端的配置
採用https協議的服務器必需要有一套數字證書, 能夠本身製做, 也能夠向相關組織申請, 區別就是本身頒佈的證書須要客戶端驗證經過, 才能夠繼續訪問, 而使用受信任的組織申請的證書則不會彈出提示頁面服務器
傳送證書(公鑰)
這個證書其實就是公鑰(其實這個就是非對稱加密產生的公鑰), 包含了不少信息, 如證書的頒發機構, 過時時間等.工具
客戶端解析證書
這裏是由客戶端的SSL(TSL)來完成的, 首先會檢驗公鑰是否有效, 若是發現異常, 則會彈出一個警告框, 提示證書存在問題, 若是證書沒有問題那麼就生成一個隨機值(對稱加密生成的私鑰), 而後使用證書對該隨機值進行加密(使用非對稱產生的公鑰加密對稱加密生成的私鑰保證了私鑰的安全性).加密
傳送加密信息
這裏傳送的是用證書加密後的隨機值, 目的就是讓服務端獲得這個隨機值(服務端獲取到和客戶端同樣的私鑰), 之後客戶端和服務端的通訊就能夠經過這個隨機值來進行加密解密了.htm
服務端解密信息
服務端使用生成證書時產生的私鑰解密, 獲得了客戶端傳來的隨機值(對稱加密產生的私鑰), 而後把響應內容經過該隨機值進行對稱加密. 這樣服務端和客戶端都有私鑰, 就能進行加密和解密了.blog
傳輸加密後的信息
這部分信息是服務端使用私鑰加密後的信息, 能夠在客戶端利用私鑰被還原.get
客戶端解密信息
客戶端使用以前生成的私鑰來解密服務端傳來的加密信息, 獲取正確內容, 整個過程第三方即便獲取了數據, 也沒法解密.class
HTTPS常見攻擊方式:隨機數
降級攻擊(SSL剝離攻擊)
解密攻擊(明文, 證書僞造)
協議漏洞, 實現方法的漏洞, 配置不嚴格
ps: 關於HTTPS也能夠被charles抓包獲取被加密的數據的問題, 這個是因爲客戶端自己安裝了僞造的證書, 至關因而中間人攻擊, 這個問題, 就是用戶問題, 沒法去避免的.
之因此能夠攻擊,是由於客戶端信任的證書的合法性,而後從證書裏面獲取到公鑰對本身隨機生成的密鑰進行加密,而抓包工具是知道私鑰的,能夠解密拿到隨機的密鑰
服務器用密鑰解密獲取對稱密鑰,而後,雙方就已對稱密鑰進行加密解密通訊了
解決方案:代碼層面,使用公鑰去解密 第三方用戶信任的證書,由於證書的私鑰中間人是不知道的