Https涉及到的主體
- 客戶端综膀。通常是瀏覽器督弓,也可是自己編寫的各種語言的客戶端程序
- 服務(wù)端摹菠。一般指的是支持https的網(wǎng)站
- CA(certificate authorites)機構(gòu)。HTTPS證書簽發(fā)和管理機構(gòu)。
發(fā)明Https的動機
1.認證正在訪給問的網(wǎng)站随常。什么是認證網(wǎng)站?比如我們訪問支付寶抹竹,怎么樣確定我們訪問的是阿里巴巴官方提供的支付寶而不是假冒的釣魚網(wǎng)站线罕?
- 保證所傳輸數(shù)據(jù)的私密性和完整性。http是明文傳輸窃判,所以在同一網(wǎng)絡(luò)中的其他用戶可以通過網(wǎng)絡(luò)抓包來竊取和篡改數(shù)據(jù)包的內(nèi)容钞楼,甚至運營商或者Wi-Fi提供者,都有可能篡改http報文袄琳,添加廣告以進行盈利询件。
Https的工作流程
image.png
可以看到工作流程基本分為3個部分:
- 瀏覽器客戶端維護一個受信任的CA機構(gòu)列表燃乍,并保存了這些機構(gòu)的證書。第一階段宛琅,服務(wù)器會提供經(jīng)CA機構(gòu)認證頒發(fā)的服務(wù)器證書刻蟹。如果認證該證書的CA機構(gòu)存在與客戶端瀏覽器的受信任CA機構(gòu)列表中,并且服務(wù)器證書中的信息與當(dāng)前正在訪問的網(wǎng)站(域名)等一致嘿辟,那么瀏覽器就認為改服務(wù)端是可信的舆瘪,并且從服務(wù)器證書中取出服務(wù)器公鑰。如果證書提供的CA機構(gòu)不存在于瀏覽器受信任的CA機構(gòu)列表中红伦,則瀏覽器會提示用戶英古,根據(jù)用戶的選擇,決定是否瀏覽當(dāng)前網(wǎng)站昙读。我們也可以管理這個受信任的CA機構(gòu)列表召调,添加或者刪除。
- 協(xié)商會話密鑰蛮浑∵肱眩客戶端在認證完服務(wù)器,獲得服務(wù)器的公鑰之后沮稚,利用該公鑰和服務(wù)器進行加密通信艺沼,協(xié)商出兩個會話密鑰,分別用于加密客戶端往服務(wù)器發(fā)送數(shù)據(jù)的客戶端會話密鑰壮虫,用于加密服務(wù)端往客戶端發(fā)送數(shù)據(jù)的服務(wù)端會話密鑰澳厢,在已有服務(wù)器公鑰,可以加密通訊的前提下囚似,還要協(xié)商出兩個會話密鑰是因為非對稱加密相對復(fù)雜度更高,在數(shù)據(jù)傳輸過程中线得,使用對稱加密饶唤,可以節(jié)省計算資源。另外會話密鑰是隨機生成的贯钩,每次協(xié)商都有不一樣的結(jié)果募狂,所以安全性比較高。
- 加密通訊角雷,此時客戶端服務(wù)器雙方都有了本次通訊的會話密鑰祸穷,之后傳輸?shù)膆ttp數(shù)據(jù),度通過會話密鑰加密勺三。這樣網(wǎng)絡(luò)上的其他用戶雷滚,將很難竊取和篡改客戶端和服務(wù)端之間傳輸?shù)臄?shù)據(jù),從而保證了數(shù)據(jù)的私密性和完整性吗坚。
使用https的流程
總結(jié)
- 說是討論Https祈远,事實上Https就是Http跑在SSI或者TLS上呆万,所以本文討論的原理和流程其實是SSL和TLS的流程,對于其他使用SSL和TLS的應(yīng)用層協(xié)議车份,本文一樣有效谋减。
- 本文只討論了客戶端驗證服務(wù)端,服務(wù)端也可以給客戶端頒發(fā)證書并驗證客戶端扫沼,做雙向驗證出爹。
- 由于采用了加密通訊,Https無疑比HTTP更消耗服務(wù)器資源缎除。這也是很多公司明明支持Https卻采用Http的原因严就。