HTTPS(HyperText Transfer Protocol over Secure Socket Layer)超文本傳輸安全協(xié)議妹沙, 近兩年Google橱脸、Baidu、Facebook 等這樣的互聯(lián)網巨頭,不謀而合地開始大力推行 HTTPS雹有, 國內外的大型互聯(lián)網公司很多也都已經啟用了全站 HTTPS地淀,這也是未來互聯(lián)網發(fā)展的趨勢失球。
為鼓勵全球網站的 HTTPS 實現(xiàn),一些互聯(lián)網公司都提出了自己的要求:
Google 已調整搜索引擎算法帮毁,讓采用 HTTPS 的網站在搜索中排名更靠前实苞;
從 2017 年開始,Chrome 瀏覽器已把采用 HTTP 協(xié)議的網站標記為不安全網站烈疚;
蘋果要求 2017 年 App Store 中的所有應用都必須使用 HTTPS 加密連接黔牵;
當前國內炒的很火熱的微信小程序也要求必須使用 HTTPS 協(xié)議;
新一代的 HTTP/2 協(xié)議的支持需以 HTTPS 為基礎爷肝。
因此在不久的將來猾浦,全網 HTTPS 勢在必行。
(1)作用
對數據進行加密灯抛,并建立一個信息安全通道金赦,來保證傳輸過程中的數據安全。對網站服務器進行真實身份認證对嚼。
(2)使用特征
我們經常會在Web的登錄頁面和購物結算界面等使用HTTPS通信夹抗。
使用HTTPS通信時,不再用 http:// 纵竖,而是改用 https:// 漠烧。另外,當瀏覽器訪問HTTPS通信有效的Web網站時磨确,瀏覽器的地址欄內會出現(xiàn)一個帶鎖的標記沽甥。
架構圖
HTTPS并非是應用層一個新的協(xié)議,通常 HTTP 直接和 TCP 通信乏奥,HTTPS則先和安全層(SSL/TLS)通信摆舟,然后安全層再和 TCP 層通信。
SSL/TLS協(xié)議就是為了解決上面提到的HTTP存在的問題而生的,下面我們來看一下它是怎么解決的:
- 所有的信息都是加密傳輸的恨诱,第三方無法竊聽
- 配備身份驗證(服務端程序)媳瞪,防止身份被冒充
- 具有校驗機制,一旦被篡改照宝,通信雙方會立刻發(fā)現(xiàn)
工作原理
HTTPS是身披SSL/TLS外殼的HTTP蛇受,TLS全稱傳輸層安全協(xié)議Transport Layer Security Protocol,TLS/SSL是一種加密通道的規(guī)范厕鹃。
TLS協(xié)議是由TLS記錄協(xié)議(TLS record Protocol)和TLS握手協(xié)議(TLS handshake Protocol)這兩層協(xié)議疊加而成的兢仰。
記錄協(xié)議:TLS Record protocol
TLS記錄協(xié)議位于TLS握手協(xié)議的下層,是負責使用對稱密碼對消息進行加密通信的部分剂碴,加密使用的密鑰是通過握手協(xié)議在服務器和客戶端之間協(xié)商決定的把将。
握手協(xié)議:TLS Handshaking Protocols由TLS Change Ciper Spec Protocol(密碼規(guī)格變更協(xié)議)和TLS Alert Protocol(警告協(xié)議)組成負責在客戶端和服務器之間協(xié)商決定密碼算法和共享密鑰。
密碼規(guī)格變更協(xié)議負責向通信對象傳達變更密碼方式的信號忆矛,當協(xié)議中途發(fā)生錯誤時察蹲,就會通過警告協(xié)議傳達給對方。警告協(xié)議是TLS握手協(xié)議負責在發(fā)送錯誤時將錯誤傳達給對方催训。
HTTPS和HTTP協(xié)議相比提供了:
- 數據完整性:內容傳輸經過完整性校驗
- 數據隱私性:內容經過對稱加密洽议,每個連接生成一個唯一的加密密鑰
- 身份認證:第三方無法偽造服務端(客戶端)身份
其中,數據完整性和隱私性由TLS Record Protocol保證漫拭,身份認證由TLS Handshaking Protocols實現(xiàn)亚兄。
理解HTTPS前需要理解這些概念:對稱加密、非對稱加密嫂侍、摘要算法儿捧、數字簽名、證書挑宠、認證中心(CA - Certificate Authority)
對稱加密算法
(1)定義:
采用單鑰密碼系統(tǒng)的加密方法,同一個密鑰可以同時用作信息的加密和解
密颓影,這種加密方法稱為對稱加密各淀,也稱為單密鑰加密。
(2)要素:
原文诡挂、秘鑰碎浇、算法
秘鑰:在密碼學中是一個定長的字符串、需要根據加密算法確定其長度
(3)工作過程:
對稱加密通常使用的是相對較小的密鑰璃俗,一般小于256 bit奴璃。因為密鑰越大,加密越強城豁,但加密與解密的過程越慢苟穆。如果你只用1 bit來做這個密鑰,那黑客們可以先試著用0來解密,不行的話就再用1解雳旅;但如果你的密鑰有1 MB大跟磨,黑客們可能永遠也無法破解,但加密和解密的過程要花費很長的時間攒盈。密鑰的大小既要照顧到安全性抵拘,也要照顧到效率。
加密:明文 + 密鑰 -> 密文 解密:密文 + 密鑰 -> 明文
(4)算法
DES(Data Encryption Standard):數據加密標準(現(xiàn)在用的比較少型豁,因為它的加密強度不夠僵蛛,能夠暴力破解)
3DES:原理和DES幾乎是一樣的,只是使用3個密鑰迎变,對相同的數據執(zhí)行三次加密充尉,增強加密強度。(缺點:要維護3個密鑰氏豌,大大增加了維護成本)
AES(Advanced Encryption Standard):高級加密標準喉酌,用來替代原先的DES,目前美國國家安全局使用的泵喘,蘋果的鑰匙串訪問采用的就AES加密泪电。是現(xiàn)在公認的最安全的加密方式,是對稱密鑰加密中最流行的算法纪铺。
AES128和AES256主要區(qū)別是密鑰長度不同(分別是128bits,256bits)相速、加密處理輪數不同(分別是10輪,14輪)鲜锚,后者強度高于前者突诬。
(5)特點
優(yōu)點:算法公開、計算量小芜繁、加密速度快旺隙、加密效率高。
缺點:相對來說不算特別安全骏令,只有一把鑰匙蔬捷,密文如果被攔截,且密鑰也被劫持榔袋,那么周拐,信息很容易被破譯。
(6)推演
為了防止上述現(xiàn)象的發(fā)生凰兑,人們想到一個辦法:對傳輸的信息加密(即使黑客截獲妥粟,也無法破解)
加密公式: f1 ( key(密鑰),data ) = X(密文)
解密公式: f2 ( key(密鑰)吏够,X(密文) ) = data
缺陷:
加密和解密同用一個密鑰勾给,加密和解密都會用到密鑰滩报,沒有密鑰就無法對密碼解密,反過來說锦秒,任何人只要持有密鑰就能解密露泊。
改進:比如服務器為每一個客戶端請求的TCP連接生成一個唯一的key
缺陷:
不同的客戶端、服務器數量龐大旅择,所以雙方都需要維護大量的密鑰惭笑,維護成本很高。
因每個客戶端生真、服務器的安全級別不同沉噩,密鑰極易泄露。
非對稱加密算法
1)簡介:
非對稱加密是計算機通信安全的基石柱蟀,保證了加密數據不會被破解川蒙。
非對稱加密算法需要兩個密鑰:公開密鑰(public key) 和私有密(private key)
公開密鑰和私有密鑰是一對
2)特點:
如果用公開密鑰對數據進行加密,只有用對應的私有密鑰才能解密长已。
如果用私有密鑰對數據進行加密畜眨,只有用對應的公開密鑰才能解密。
由于其算法復雜术瓮,而使得加密康聂、解密速度沒有對稱加密解密的速度快。有兩種密鑰胞四,其中一個是公開的恬汁,這樣就可以不需要像對稱密碼那樣傳輸對方的密鑰了,這樣安全性就大了很多辜伟。
3)常用算法:
RSA氓侧、DSA、ECDSA
4)推演 - 非對稱加密
公鑰加密:f1 ( publicKey导狡,data ) = X
私鑰解密:f2 ( privateKey约巷,X ) = data
私鑰加密:f3 ( privateKey,data) = X
公鑰解密:f1 ( publicKey旱捧,X) = data
私鑰保存在服務端载庭,公鑰保存在客戶端,私鑰永遠不對外暴露
缺陷:
公鑰是公開的(也就是黑客也會有公鑰)廊佩,所以第 ④ 步私鑰加密的信息,如果被黑客截獲靖榕,其可以使用公鑰進行解密标锄,獲取其中的內容。
(5)推演 - 對稱加密和非對稱加密
非對稱加密既然也有缺陷茁计,那我們就將對稱加密料皇,非對稱加密兩者結合起來谓松,取其精華、去其糟粕践剂,發(fā)揮兩者的各自的優(yōu)勢鬼譬。
解決問題:
通過對稱加密和非對稱加密的組合使用,解決內容可能被竊聽的問題逊脯。
存在缺陷:
解決報文可能遭篡改問題
解決通信方身份可能被偽裝的問題
解決方案:
解決報文可能遭篡改問題——數字簽名
解決通信方身份可能被偽裝的問題——數字證書
數字簽名
1)數字簽名有兩種功能:
能確定消息確實是由發(fā)送方簽名并發(fā)出來的优质,因為別人假冒不了發(fā)送方的簽名。
數字簽名能確定消息的完整性,證明數據是否未被篡改過军洼。
2)數字簽名如何生成
將要發(fā)送的數據先用Hash算法(摘要算法巩螃、散列算法)生成消息摘要,然后用發(fā)送者的私鑰加密生成數字簽名匕争,與原文一起傳送給接收者避乏。
接下來就是接收者校驗數字簽名的流程了。
3)校驗數字簽名流程
接收者只有用發(fā)送者的公鑰才能解密被加密的摘要信息甘桑,然后用HASH函數對收到的原文產生一個摘要信息拍皮,與上一步得到的摘要信息對比。如果相同跑杭,則說明收到的信息是完整的铆帽,在傳輸過程中沒有被修改,否則說明信息被修改過艘蹋,因此數字簽名能夠驗證信息的完整性锄贼。
假設消息傳遞在客戶端、服務器之間發(fā)生女阀。
服務器將消息連同數字簽名一起發(fā)送給客戶端宅荤,客戶端接收到消息后,通過校驗數字簽名浸策,就可以驗證接收到的消息就是服務器發(fā)送的冯键。
問題:
這個過程的前提是客戶端知道服務器的公鑰。問題的關鍵的是庸汗,和消息本身一樣惫确,公鑰不能在不安全的網絡中直接發(fā)送給客戶端,或者說拿到的公鑰如何證明是服務器的蚯舱。此時就需要引入了證書頒發(fā)機構(Certificate Authority改化,簡稱CA),CA數量并不多枉昏,客戶端內置了所有受信任CA的證書陈肛。
消息摘要算法分為三類:
MD(Message Digest):消息摘要算法
SHA(Secure Hash Algorithm):安全散列算法
MAC(Message Authentication Code):消息認證碼
證書
數字證書:是一個經證書認證結構數字簽名的包含公開密鑰、擁有者信息的文件兄裂,有點像生活中的身份證句旱、護照等阳藻,是由一個官方的證書頒發(fā)機構簽發(fā)的一組數據。這種證書很難偽造谈撒,用于使用者的身份證明腥泥。
實際上,我們使用的證書分很多種類型啃匿,SSL證書只是其中的一種蛔外,SSL證書負責傳輸公鑰。我們常見的證書根據用途不同大致有以下幾種:
1立宜、SSL證書冒萄,用于加密HTTP協(xié)議,也就是HTTPS橙数,TLS尊流。如果一個web應用想要升級為https,需要購買證書灯帮。
2崖技、代碼簽名證書,用于簽名二進制文件钟哥,比如Windows內核驅動迎献,F(xiàn)irefox插件,Java代碼簽名等等
3腻贰、客戶端證書吁恍,用于加密郵件
4、雙因素證書播演,網銀專業(yè)版使用的USB Key里面用的就是這種類型的證書
證書中包含:組織信息冀瓦、域名信息、公鑰(比如拉勾教育的公鑰)、證書有效期等信息。
CA - 數字證書認證機構:
CA是證書的簽發(fā)機構藐石,它是公鑰基礎設施(Public Key Infrastructure,PKI)的核心感局。CA是負責簽發(fā)證書、認證證書暂衡、管理已頒發(fā)證書的機關询微。
認證過程(升級HTTPS):
- 服務器的運營人員(網站的運營)向第三方機構CA(或者其代理機構)提交公鑰、組織信息狂巢、域名等信息并申請認證;
- CA通過線上拓提、線下等多種手段驗證申請者提供信息的真實性,如組織是否存在隧膘、企業(yè)是否合法代态,是否擁有域名的所有權等;
-
如信息審核通過,CA會向申請者簽發(fā)認證文件-證書疹吃。證書包含以下信息:
申請者公鑰(如拉勾教育的公鑰)蹦疑、申請者的組織信息和個人信息、簽發(fā)機構的信息萨驶、有效時間歉摧、證書序列號等信息的明文,同時包含一個CA機構的數字簽名腔呜。 其中簽名的產生算法:首先叁温,使用散列函數計算公開的明文信息的信息摘要,然后核畴,采用 CA的私鑰對信息摘要進行加密膝但,密文即簽名;
image.png
image.png
用戶向web服務器發(fā)起一個安全連接的請求服務器返回經過CA認證的數字證書谤草,證書里面包含了服務器的public key跟束。
用戶拿到數字證書,怎么確保CA證書不被劫持丑孩,黑客完全可以把一個假的CA證書發(fā)給Client冀宴,進而欺騙Client,用戶如何辨別證書真?zhèn)危?br> CA的大殺器就是温学,CA把自己的CA證書集成在了瀏覽器和操作系統(tǒng)里面略贮。
Client拿到瀏覽器或者操作系統(tǒng)的時候,已經有了CA證書仗岖,沒有必要通過網絡獲取逃延,那自然也不存在劫持的問題。
查看瀏覽器CA證書:設置-->安全檢查-->安全-->管理證書
查看操作系統(tǒng)CA證書:certmgr.msc
Client 讀取證書中的相關的明文信息箩帚,采用相同的散列函數計算得到信息摘要真友,然后利用對應CA的公鑰解密簽名數據,對比證書的信息摘要紧帕,如果一致盔然,則可以確認證書的合法性,即服務器的公開密鑰是值得信賴的是嗜。
客戶端還會驗證證書相關的域名信息愈案、有效時間等信息; 客戶端會內置信任CA的證書信息(包含公鑰),如果CA不被信任鹅搪,則找不到對應 CA的證書站绪,證書也會被判定非法。
SSL證書分類:
DV(域名型SSL):個人站點
OV(企業(yè)型SSL):企業(yè)官網
EV(增強型SSL):對安全需求更強的企業(yè)官網丽柿、電商恢准、互聯(lián)網金融網站
完整的 HTTPS 的通信
TLS握手過程:
明文----->非對稱加密----->對稱加密
第一步魂挂,瀏覽器給出TLS協(xié)議版本號、一個客戶端生成的隨機數1(Clientrandom)馁筐,以及客戶端支持的加密方法涂召。(明文通訊)
第二步,服務器確認雙方使用的加密方法敏沉,并給出數字證書果正、以及一個服務器生成的隨機數2(Server random)。(明文通訊)
第三步盟迟,瀏覽器確認數字證書有效秋泳,然后生成一個新的隨機數3(Pre-master secret),并使用數字證書中的公鑰加密這個隨機數攒菠,發(fā)給服務器迫皱。(使用非對稱加密算法)
瀏覽器確認數字證書有效:瀏覽器和操作系統(tǒng)內部內置了很多CA機構的證書,是否篡改要尔、是否在有效期內舍杜、域名和訪問的網站是否匹配。
第四步赵辕,服務端使用自己的私鑰既绩,獲取客戶端發(fā)來的隨機數(即Premaster secret)。
雙方就都有三個一模一樣的隨機數还惠,前兩個是明文發(fā)送的饲握,最后客戶端生成的這個是使用證書中的公鑰密文發(fā)送的。
第五步蚕键,客戶端和服務器根據約定的加密方法救欧,使用前面的三個隨機數經過特定的算法,生成"對話密鑰"(session key)锣光,用來加密接下來的整個對話過程笆怠。
對話密鑰,又叫做會話密鑰誊爹,其實就是講之前通訊中的三個隨機數生成一個密鑰(對稱加密)
三個隨機數----->第三個是使用非對稱加密---->相同的算法------->會話密鑰
第六步:客戶端和服務器都會第一次使用會話密鑰加密一個消息發(fā)送給對方蹬刷。
備注:客戶端收到服務端發(fā)送的Certificate 報文后首先會校驗證書的合法性:
證書路徑信任鏈逐級校驗通過(證書確由可信 CA 認證簽發(fā));
簽名解密成功(確系證書持有者親筆)频丘;
從簽名解析出的摘要和證書公開內容的摘要一致(證書內容完整办成,未被篡改);
主題子域與 URL 中的 HOST 一致搂漠,綜上確保訪問的網站是來自預期目標服務器且非劫持或釣魚迂卢。
session的恢復:
握手階段用來建立SSL連接。如果出于某種原因,對話中斷而克,就需要重新握手靶壮。
這時有兩種方法可以恢復原來的session:一種叫做session ID,另一種叫做 session ticket拍摇。
session ID的思想很簡單亮钦,就是每一次對話都有一個編號(session ID)。如果對話中斷充活,下次重連的時候,只要客戶端給出這個編號蜡娶,且服務器有這個編號的記錄混卵,雙方就可以重新使用已有的"對話密鑰",而不必重新生成一把窖张。
上圖中幕随,客戶端給出session ID,服務器確認該編號存在宿接,雙方就不再進行握手階段剩余的步驟赘淮,而直接用已有的對話密鑰進行加密通信。
session ID是目前所有瀏覽器都支持的方法睦霎,但是它的缺點在于session ID往往只保留在一臺服務器上梢卸。所以,如果客戶端的請求發(fā)到另一臺服務器副女,就無法恢復對話蛤高。session ticket就是為了解決這個問題而誕生的,目前只有Firefox和Chrome瀏覽器支持碑幅。
上圖中戴陡,客戶端不再發(fā)送session ID,而是發(fā)送一個服務器在上一次對話中發(fā)送過來的session ticket沟涨。這個session ticket是加密的恤批,只有服務器才能解密,其中包括本次對話的主要信息裹赴,比如對話密鑰和加密方法喜庞。當服務器收到session ticket以后,解密后就不必重新生成對話密鑰了篮昧。