梳理HTTPS知識,若有錯誤請指正,參考文章以下:html
騰訊雲文檔SSL原理:
https://www.qcloud.com/docume...
HTTPS:
http://www.360doc.com/content...
https://segmentfault.com/a/11...
SSL與TLS:
https://segmentfault.com/a/11...
http://kb.cnblogs.com/page/19...
RSA加密算法-維基百科:
https://zh.wikipedia.org/zh-c...
數字證書基本概念:
http://blog.csdn.net/adeyi/ar...算法
加密、解密使用相同密鑰。segmentfault
encode : 安全
decode : 服務器
加密、解密使用不一樣密鑰,分爲公鑰、私鑰。網站
公鑰密碼體制使用非對稱加密算法,分三部分:加解密算法、公鑰、私鑰。
其中,算法、公鑰公開,私鑰保密,加解密過程以下:加密
encode : spa
decode : 操作系統
RSA是一種公鑰密碼體制,算法、公鑰公開,私鑰保密。RSA的一對公鑰、私鑰均可以用來加密和解密,公鑰加密的內容只能使用私鑰解密,私鑰加密的內容只能使用公鑰解密。.net
將任意長度的二進制值映射爲較短的固定長度的二進制值,這個小的二進制值稱爲哈希值。
做用:保證通訊過程當中傳遞信息未被修改。
實現:計算信息的hash值,並與信息一塊兒發送,爲避免惡意同時篡改信息與hash值狀況,對hash值加密,接收方收到數據後,計算信息的hash值,對比傳輸解密後的hash值,便可獲知信息是否未被修改。(加密細節後文詳述)
HTTP請求
黑客攔截
裸奔的HTTP信息容易被竊聽甚至篡改。如今有2個問題:
1)如何確保客戶端的通訊對象是真正的服務器而非黑客
2)如何保證即便通訊內容被黑客竊取也不會泄露真是內容
SSL版本:SSL1.0、SSL2.0、SSL3.0
TLS版本:TLS1.0、TLS1.一、TLS1.2。
TLS是IETF制定的一種新的協議,它創建在SSL 3.0協議規範之上,是SSL 3.0的後續版本。二者差異極小,能夠理解爲SSL 3.1。SSL3.0和TLS1.0因爲存在安全漏洞,已經不多被使用到。TLS 1.3 改動會比較大,目前還在草案階段,目前使用最普遍的是TLS 1.一、TLS 1.2。
1)Client請求,發送客戶端信息(如:支持的非對稱/對稱加密算法、壓縮方式等)+隨機碼1
2)Server響應,發送確認信息(如:確認後續使用的非對稱/對稱加密算法、壓縮方式等)+數字證書+隨機碼2
2)Client校驗數字證書真實性,確認後得到服務器公鑰
3)Client確認,發送確認信息+隨機碼3,隨機碼3公鑰加密
3)Server收到後,Clinet和Server都有3個隨機數,組合生成密鑰
4)Server確認,握手結束,下一步開始使用協商的對稱加密算法+密鑰進行通訊
5)對稱加密算法+密鑰,請求,序號1
6)對稱加密算法+密鑰,響應,序號2
...注意:
2個概念:
指紋:數字證書主體的hash值
簽名:使用CA(證書管理機構)的私鑰,加密後的指紋
Client 校驗證書確認服務器身份過程:
操做系統安裝時就已經自帶權威CA機構的證書,這些證書裏包含其CA公鑰,用來解密數字證書的簽名(被CA私鑰加密)。
1)客戶端收到服務器的數字證書A,查看A的Issuer證書發佈機構,從操做系統中找到對應發佈機構的CA證書,獲取CA公鑰
2)使用CA公鑰解密證書籤名,得到證書主體內容的hash1
3)從新計算證書主體內容得hash2,與hash1對比證實證書未被修改
4)從證書中得到服務器公鑰,爲HTTPS過程當中加密協商作準備
步驟1~4確認數字證書自己真實性,確實爲權威CA機構發佈,而非僞造5)確認服務器證書真實性後,對比訪問域名與數字證書Subject證書全部者是否一致等信息,確認訪問服務器真實性。
步驟5確認訪問網站的真實性