HTTPS = SSL(Secure Socket Layer) / TLS(Transport Layer Security)協(xié)議 + HTTP協(xié)議
目前最新版本:HTTP2,TLS1.3,SSL3.0 巨頭棄用 TLS 1.0/1.1 協(xié)議
Hypertext Transfer Protocol Secure (HTTPS) is an extension of the Hypertext Transfer Protocol (HTTP). It is used for secure communication over a computer network, and is widely used on the Internet. In HTTPS, the communication protocol is encrypted using Transport Layer Security (TLS) or, formerly, its predecessor, Secure Sockets Layer (SSL). The protocol is therefore also often referred to as HTTP over TLS, or HTTP over SSL. HTTPS (Hypertext Transfer Protocol Secure) 是基于 HTTP 的擴(kuò)展,用于計(jì)算機(jī)網(wǎng)絡(luò)的安全通信评矩,已經(jīng)在互聯(lián)網(wǎng)得到廣泛應(yīng)用。在 HTTPS 中阱飘,原有的 HTTP 協(xié)議會得到 TLS (安全傳輸層協(xié)議) 或其前輩 SSL (安全套接層) 的加密斥杜。因此 HTTPS 也常指 HTTP over TLS 或 HTTP over SSL。 ---Wikipedia
1.加密方式
傳輸過程認(rèn)證三階段:數(shù)字證書簽名認(rèn)證(網(wǎng)站正確性驗(yàn)證&獲取網(wǎng)站公鑰) + 非對稱加密(會話密鑰傳輸) + 對稱加密(數(shù)據(jù)報(bào)文加解密采用相同的會話密鑰)
HTTPS在提高數(shù)據(jù)傳輸安全性的同時(shí)也需要使得數(shù)據(jù)傳輸效率不至于變得低效俯萌,非對稱加密較為耗時(shí)果录,故報(bào)文傳輸采用對稱加密,會話密鑰傳輸采用非對稱加密咐熙,網(wǎng)站證書采用明文傳輸弱恒。
2.如何保證傳輸過程中敏感信息的安全?
HTTP采用明文傳輸棋恼,故需要增加相應(yīng)的加密機(jī)制并防止中間人攻擊返弹。
由上圖所示,客戶端訪問網(wǎng)站爪飘,建立連接第一步為服務(wù)端返回其數(shù)字證書义起,客戶端通過CA公鑰及證書簽名和簽名計(jì)算方法進(jìn)行真實(shí)性校驗(yàn)。校驗(yàn)成功后客戶端生成隨機(jī)會話密鑰并通過數(shù)字證書中服務(wù)端的公鑰加密师崎,傳輸給服務(wù)端默终。服務(wù)端收到加密的會話密鑰后通過自己的私鑰進(jìn)行解密,獲得與客戶端相同的會話密鑰,服務(wù)端通過會話密鑰加密數(shù)據(jù)報(bào)文傳輸數(shù)據(jù)發(fā)送到客戶端齐蔽,客戶端收到數(shù)據(jù)通過會話密鑰進(jìn)行解密两疚。此后數(shù)據(jù)發(fā)送和接收即通過會話密鑰的對稱加密方式進(jìn)行加解密。
3.中間人攻擊
- 沒有CA機(jī)構(gòu)的情況下:
瀏覽器向網(wǎng)站服務(wù)器請求含滴,服務(wù)器把公鑰A明文傳輸給瀏覽器诱渤。 中間人劫持到公鑰A并保存下來,把數(shù)據(jù)包中的公鑰A替換成自己偽造的公鑰B谈况,瀏覽器隨機(jī)生成一個(gè)用于對稱加密的會話密鑰勺美,用公鑰B加密后傳給服務(wù)器。中間人劫持后用私鑰B’解密得到會話密鑰碑韵,再用公鑰A加密后傳給服務(wù)器赡茸。服務(wù)器拿到后用私鑰A’解密得到會話密鑰,開始與客戶端進(jìn)行報(bào)文傳輸祝闻,此時(shí)中間人擁有會話密鑰坛掠,將造成信息泄漏。
- 第三方權(quán)威機(jī)構(gòu)CA(Certification Authority)引入后即可防止上述中間人攻擊治筒。真實(shí)客戶端需要確保服務(wù)端下發(fā)的公鑰是真實(shí)的公鑰屉栓,通過第三方可信機(jī)構(gòu)的公鑰驗(yàn)證數(shù)字證書簽名即可確認(rèn)服務(wù)端公鑰的真實(shí)性。
4.數(shù)字證書申請:由第三方權(quán)威機(jī)構(gòu)CA(Certification Authority)頒發(fā)給網(wǎng)站耸袜,權(quán)威機(jī)構(gòu)會跟主流的瀏覽器或操作系統(tǒng)合作友多,將他們的公鑰內(nèi)置到瀏覽器或操作系統(tǒng)環(huán)境中
采用 HTTPS 協(xié)議的服務(wù)器必須有一套數(shù)字證書,證書需要申請堤框,由專門的數(shù)字證書認(rèn)證機(jī)構(gòu)(CA)進(jìn)行嚴(yán)格的審核之后頒發(fā)域滥。頒發(fā)的證書保存在服務(wù)端康栈,用于服務(wù)端與客戶端建立通信時(shí)明文傳給客戶端寂殉,客戶端再使用CA的公鑰進(jìn)行簽名驗(yàn)證晦款。服務(wù)端私鑰需安全保存不可泄漏,服務(wù)端公鑰則附帶在證書的信息中公開青扔。證書本身有附帶證書電子簽名映皆,用來驗(yàn)證證書的完整性和真實(shí)性租幕,用以防止證書被篡改腊嗡。
服務(wù)器運(yùn)營人員向第三方認(rèn)證機(jī)構(gòu)(CA)提交公鑰着倾、組織信息、域名等信息以申請數(shù)字證書
認(rèn)證機(jī)構(gòu)認(rèn)證通過后頒發(fā)給網(wǎng)站的數(shù)字證書包含:申請者的組織信息和個(gè)人信息燕少、證書持有者的公鑰卡者、證書頒發(fā)機(jī)構(gòu)信息、證書有效期客们、證書序列號崇决、證書電子簽名材诽、簽名計(jì)算方法
注:證書電子簽名用于驗(yàn)證證書的正確性,由證書信息結(jié)合一定的Hash函數(shù)生成并通過CA的私鑰加密恒傻。證書接收方包括網(wǎng)站運(yùn)營人員和訪問此網(wǎng)站的客戶端岳守,獲取證書取出簽名文件并通過CA公鑰、簽名計(jì)算方法進(jìn)行解密認(rèn)證和證書正確性認(rèn)證碌冶,確保證書沒有被中間人篡改。
5.加密與簽名
對稱加密:加解密使用相同密鑰
非對稱加密:加解密使用不同密鑰(公鑰涝缝、私鑰)扑庞,一般使用使用公鑰加密、私鑰解密拒逮,私鑰自己保存罐氨,公鑰公開第一種用法:公鑰加密,私鑰解密 ---用于加解密
既然是加密滩援,那肯定是不希望別人知道我的消息栅隐,所以只有我才能解密,所以可得出公鑰負(fù)責(zé)加密玩徊,私鑰負(fù)責(zé)解密租悄;
第二種用法:私鑰簽名,公鑰驗(yàn)簽恩袱。---用于簽名
既然是簽名泣棋,那肯定是不希望有人冒充我發(fā)消息,只有我才能發(fā)布這個(gè)簽名畔塔,所以可得出私鑰負(fù)責(zé)簽名潭辈,公鑰負(fù)責(zé)驗(yàn)證。私鑰和公鑰是一對澈吨,誰都可以加解密把敢,只是誰加密誰解密是看情景來用的:
第一種情景是簽名,使用私鑰加密谅辣,公鑰解密修赞,用于讓所有公鑰所有者驗(yàn)證私鑰所有者的身份并且用來防止私鑰所有者發(fā)布的內(nèi)容被篡改,但是不能保證內(nèi)容不被他人獲得桑阶;
第二種情景是加密榔组,用公鑰加密,私鑰解密联逻,用于向公鑰所有者發(fā)布信息搓扯,由于中間人沒有解密的私鑰故無法獲取真實(shí)內(nèi)容,但信息可能被他人篡改包归。加密情景:
甲想給乙發(fā)一個(gè)安全保密的數(shù)據(jù)锨推,那么甲乙應(yīng)該各自有一個(gè)私鑰,甲先用乙的公鑰加密這段數(shù)據(jù),再用自己的私鑰給這段加密后的數(shù)據(jù)進(jìn)行簽名换可,最后再發(fā)給乙椎椰,這樣確保了內(nèi)容既不會被讀取,也不會被篡改沾鳄。
6.以登錄為例:帳號密碼等數(shù)據(jù)為敏感信息
- 通常網(wǎng)站會使用短信驗(yàn)證碼慨飘、圖片驗(yàn)證碼、滑動驗(yàn)證译荞、最錯(cuò)誤次數(shù)瓤的、拒絕弱密碼、異常操作或登錄提醒等操作防止賬號密碼被窮舉以及客戶端進(jìn)行MD5之后再傳輸吞歼,從而防止暴露密碼明文圈膏;
- 推薦方案:把網(wǎng)站中所有的HTTP請求修改為強(qiáng)制使用HTTPS,同時(shí)客戶端與服務(wù)端約定一套可靠的密碼驗(yàn)證加解密方式篙骡,或者客戶端使用加密算法加密密碼數(shù)據(jù)使服務(wù)端進(jìn)驗(yàn)證和存儲時(shí)使用密文稽坤,客戶端常用的算法時(shí)MD5,但目前一些公共的解密庫已經(jīng)包含了大量MD5解密數(shù)據(jù)糯俗,更好的應(yīng)該是自己定義一套或者在MD5基礎(chǔ)上做一些字符修改尿褪,同時(shí)網(wǎng)站請求客戶端做好防反編譯。
- 若僅使用HTTPS當(dāng)請求接口被抓包工具獲取得湘,由于瀏覽器 or 操作系統(tǒng)已內(nèi)置第三方認(rèn)證機(jī)構(gòu)公鑰茫多,仍然可以模擬客戶端與服務(wù)端通信從而窮舉密碼,所以目前網(wǎng)站會采取各種上述手段忽刽。
7.其它
HTTP 1.1之后請求消息頭默認(rèn)啟用Connection: Keep-Alive(中文翻譯:持久連接 or 長連接)天揖,非KeepAlive模式時(shí),每個(gè)請求客戶端和服務(wù)端都需要新建一個(gè)連接跪帝,完成之后立即斷開連接(HTTP協(xié)議為無連接的協(xié)議)今膊,如請求一個(gè)圖片或html頁面,服務(wù)端通常在發(fā)送回所請求的數(shù)據(jù)之后就關(guān)閉連接伞剑;當(dāng)使用Keep-Alive模式時(shí)斑唬,客戶端到服務(wù)端的連接持續(xù)有效,直到客戶端請求消息頭加入Connection: close 時(shí)才關(guān)閉連接黎泣。
HTTP為半雙工通信方式:數(shù)據(jù)可以在一個(gè)信號載體(網(wǎng)路 / 網(wǎng)絡(luò))的兩個(gè)方向上傳輸恕刘,但是不能同時(shí)傳輸。單工通信舉例:衛(wèi)星電視抒倚、廣場廣播褐着;雙工通信舉例:手機(jī)電話。
2015年已推出HTTP 2.0托呕,Akamai公司演示HTTP 1.1 和HTTP 2.0網(wǎng)絡(luò)請求速度含蓉,由于HTTP 2.0采用了多路復(fù)用频敛、Headers壓縮等機(jī)制,使請求速度提升數(shù)倍
By the way:工具推薦Charles
圖片引用自其它文章