引言HTTP是不安全的,只需要設(shè)定相應(yīng)的DNS,做一個(gè)中間人攻擊,再將修改后的數(shù)據(jù)返回,就可以達(dá)到篡改數(shù)據(jù)的目的(加入未經(jīng)許可的廣告)。 當(dāng)我們切換HTTPS時(shí)候,運(yùn)營(yíng)商的這些小九九就施展不開了,服務(wù)端認(rèn)證不通過,瀏覽器不會(huì)展示相應(yīng)的頁(yè)面數(shù)據(jù);運(yùn)營(yíng)商實(shí)施搞的這一套東東也就不能在用戶不知情的情況下搞起來了,解決辦法是去除相應(yīng)的受污染的DNS。 安全需求加密(客戶端和服務(wù)器的對(duì)話是私密的,無須擔(dān)心被竊聽) 服務(wù)端認(rèn)證(客戶端知道它們是在與真正的而不是偽造的服務(wù)器通信) 客戶端認(rèn)證(服務(wù)器知道它們是在與真正的而不是偽造的客戶端通信) 完整性(客戶端和服務(wù)器的數(shù)據(jù)不會(huì)被修改) 效率(一個(gè)運(yùn)行足夠快的算法,一遍低端的客戶端和服務(wù)器使用) 普適性(基本上所有的客戶端和服務(wù)器都支持這些協(xié)議) 管理的可擴(kuò)展性(在任何地方的任何人都可以立即進(jìn)行安全通信) 適應(yīng)性(能夠支持當(dāng)前最知名的安全方法) 在社會(huì)上的可行性(滿足社會(huì)的政治文化需要),要有公眾受信能力
在這里最重要的是前邊幾條 數(shù)據(jù)加密 傳輸內(nèi)容進(jìn)行混淆 身份驗(yàn)證 通信雙方驗(yàn)證對(duì)方的身份真實(shí)性 數(shù)據(jù)完整性保護(hù) 檢測(cè)傳輸?shù)膬?nèi)容是否被篡改或偽造
HTTPS簡(jiǎn)介HTTPS(全稱:Hypertext Transfer Protocol Secure 超文本傳輸安全協(xié)議),是以安全為目標(biāo)的HTTP通道,簡(jiǎn)單講是HTTP的安全版。 共享密鑰加密也稱對(duì)稱密鑰加密。采用的是使用相同密鑰對(duì)報(bào)文進(jìn)行加密解密。 缺點(diǎn):無法避免被網(wǎng)絡(luò)監(jiān)聽泄漏密鑰的問題。同時(shí)對(duì)于眾多客戶端的服務(wù)器來說還需要分配和管理密鑰,對(duì)于客戶端來說也需要管理密鑰,增加設(shè)計(jì)和實(shí)現(xiàn)的復(fù)雜度,同時(shí)也降低了通信的效率。 非對(duì)稱加密,公鑰加密只能通過對(duì)應(yīng)的私鑰解密,私鑰加密只能通過對(duì)應(yīng)的公鑰解密。 缺點(diǎn):公開密鑰加密(非對(duì)稱加密)安全性高,伴隨著加密方式復(fù)雜,處理速度慢的問題。如果我們的通信都是用公開密鑰的方式加密,那么通信效率會(huì)很低。 采用非對(duì)稱加密因?yàn)榘踩?采用對(duì)稱加密是因?yàn)樗咏饷芩俣瓤?/strong> 在交換密鑰對(duì)環(huán)節(jié)使用公開密鑰加密方式(防止被監(jiān)聽泄漏密鑰)加密共享的密鑰,在隨后的通信過程中使用共享密鑰的方式使用共享的密鑰進(jìn)行加解密。 認(rèn)證方式實(shí)現(xiàn)數(shù)字證書 數(shù)字簽名是附加在報(bào)文上的特殊加密校驗(yàn)碼,可以證明是作者編寫了這條報(bào)文,前提是作者才會(huì)有私鑰,才能算出這些校驗(yàn)碼。如果傳輸?shù)膱?bào)文被篡改,則校驗(yàn)碼不會(huì)匹配,因?yàn)樾r?yàn)碼只有作者保存的私鑰才能產(chǎn)生,所以前面可以保證報(bào)文的完整性。 數(shù)字證書認(rèn)證機(jī)構(gòu)(Certificate Authority CA)是客戶端和服務(wù)器雙方都可信賴的第三方機(jī)構(gòu)。 服務(wù)器的運(yùn)營(yíng)人員向數(shù)字證書認(rèn)證機(jī)構(gòu)提出證書認(rèn)證申請(qǐng),數(shù)字證書認(rèn)證機(jī)構(gòu)在判明申請(qǐng)者的身份之后,會(huì)對(duì)已申請(qǐng)的公開密鑰做數(shù)字簽名,然后分配這個(gè)已簽名的公開密鑰,并將該公開密鑰放入公鑰證書(也叫數(shù)字證書或證書)后綁定在一起。服務(wù)器將這份有數(shù)字認(rèn)證機(jī)構(gòu)頒發(fā)的公鑰證書發(fā)總給客戶端,以進(jìn)行公開密鑰加密方式通信。 數(shù)據(jù)完整性 數(shù)字簽名是只有信息發(fā)送者才能產(chǎn)生的別人無法偽造的一段文本,這段文本是對(duì)信息發(fā)送者發(fā)送信息真實(shí)性的一個(gè)有效證明,具有不可抵賴性。 報(bào)文的發(fā)送方從報(bào)文文本生成一個(gè)128位的散列值(或稱為報(bào)文摘要活哈希值),發(fā)送方使用自己的私鑰對(duì)這個(gè)摘要值進(jìn)行加密來形成發(fā)送方的數(shù)字簽名。然后這個(gè)數(shù)字簽名將作為報(bào)文的附件一起發(fā)送給報(bào)文的接收方。報(bào)文的接收方首先從接收到的原始報(bào)文中計(jì)算出128位的散列值,再用發(fā)送方的公鑰來對(duì)報(bào)文附加的數(shù)字簽名進(jìn)行解密。如果兩次得到的結(jié)果是一致的那么接收方可以確認(rèn)該數(shù)字簽名是發(fā)送方的,同時(shí)確認(rèn)信息是真實(shí)的 。 HTTPS其實(shí)是有兩部分組成:HTTP + SSL / TLS,也就是在HTTP上又加了一層處理加密信息的模塊。服務(wù)端和客戶端的信息傳輸都會(huì)通過TLS進(jìn)行加密,所以傳輸?shù)臄?shù)據(jù)都是加密后的數(shù)據(jù)。 傳統(tǒng)的HTTP協(xié)議通信:傳統(tǒng)的HTTP報(bào)文是直接將報(bào)文信息傳輸?shù)絋CP然后TCP再通過TCP套接字發(fā)送給目的主機(jī)上。 HTTPS協(xié)議通信:HTTPS是HTTP報(bào)文直接將報(bào)文傳輸給SSL套接字進(jìn)行加密,SSL加密后將加密的報(bào)文發(fā)送給TCP套接字,然后TCP套接字再將加密后的報(bào)文發(fā)送給目的主機(jī),目的主機(jī)通過TCP套接字獲取加密后的報(bào)文給SSL套接字,SSL解密后交給對(duì)應(yīng)進(jìn)程。
SSLSSL工作在OSI七層模型中的表示層,TCP/IP 四層模型的應(yīng)用層。 SSL 基于TCP,SSL不是簡(jiǎn)單地單個(gè)協(xié)議,而是兩層協(xié)議;SSL記錄協(xié)議(SSL Record Protocol)為多種高層協(xié)議(SSL握手協(xié)議,SSL修改密碼參數(shù)協(xié)議,SSL報(bào)警協(xié)議)提供基本的安全服務(wù)。 HTTP是為Web客戶端/服務(wù)器交互提供傳輸服務(wù)的,它可以在SSL的頂層運(yùn)行;SSL記錄協(xié)議為SSL鏈接提供兩種服務(wù),1. 機(jī)密性:握手協(xié)議定義了一個(gè)共享密鑰,用于SSL載荷的對(duì)稱加密。2. 消息完整性:握手協(xié)議還定義了一個(gè)共享密鑰,它用來產(chǎn)生一個(gè)消息認(rèn)證碼(Message Authentication Code,MAC)。 SSL記錄協(xié)議操作 分段 將每個(gè)上層消息分解成不大于2^14(16384)位,然后有選擇的進(jìn)行壓縮 添加MAC 在壓縮數(shù)據(jù)的基礎(chǔ)上計(jì)算MAC 加密 消息加上MAC用對(duì)稱加密方法加密 添加SSL記錄頭 內(nèi)容類型(8位),主版本(8位),副版本(8位),壓縮長(zhǎng)度(16位) SSL握手過程 第一階段 建立安全能力 包括協(xié)議版本 會(huì)話Id 密碼構(gòu)件 壓縮方法和初始隨機(jī)數(shù) 第二階段 服務(wù)器發(fā)送證書 密鑰交換數(shù)據(jù)和證書請(qǐng)求,最后發(fā)送請(qǐng)求-相應(yīng)階段的結(jié)束信號(hào) 第三階段 如果有證書請(qǐng)求客戶端發(fā)送此證書 之后客戶端發(fā)送密鑰交換數(shù)據(jù) 也可以發(fā)送證書驗(yàn)證消息 第四階段 變更密碼構(gòu)件和結(jié)束握手協(xié)議 SSL協(xié)議兩個(gè)重要概念,SSL會(huì)話,SSL連接;SSL連接是點(diǎn)到點(diǎn)的連接,而且每個(gè)連接都是瞬態(tài)的,每一個(gè)鏈接都與一個(gè)會(huì)話關(guān)聯(lián)。SSL會(huì)話是一個(gè)客戶端和一個(gè)服務(wù)器之間的一種關(guān)聯(lián),會(huì)話由握手協(xié)議(Handshake Protocol)創(chuàng)建,所有會(huì)話都定義了一組密碼安全參數(shù),這些安全參數(shù)可以在多個(gè)連接之間共享,會(huì)話可以用來避免每一個(gè)鏈接需要進(jìn)行的代價(jià)高昂的新的安全參數(shù)協(xié)商過程。
HTTPS加密請(qǐng)求(一次握手)過程 客戶端發(fā)起握手請(qǐng)求,以明文傳輸請(qǐng)求信息,包含版本信息,加密-套件候選列表,壓縮算法候選列表,隨機(jī)數(shù),擴(kuò)展字段等信息(這個(gè)沒什么好說的,就是用戶在瀏覽器里輸入一個(gè)HTTPS網(wǎng)址,然后連接到服務(wù)端的443端口。) 服務(wù)端的配置, 采用HTTPS協(xié)議的服務(wù)器必須要有一套數(shù)字證書,可以自己制作,也可以向組織申請(qǐng)。區(qū)別就是自己頒發(fā)的證書需要客戶端驗(yàn)證通過,才可以繼續(xù)訪問,而使用受信任的公司申請(qǐng)的證書則不會(huì)彈出提示頁(yè)面。這套證書其實(shí)就是一對(duì)公鑰和私鑰。如果對(duì)公鑰不太理解,可以想象成一把鑰匙和一個(gè)鎖頭,只是世界上只有你一個(gè)人有這把鑰匙,你可以把鎖頭給別人,別人可以用這個(gè)鎖把重要的東西鎖起來,然后發(fā)給你,因?yàn)橹挥心阋粋€(gè)人有這把鑰匙,所以只有你才能看到被這把鎖鎖起來的東西。
服務(wù)端返回協(xié)商的信息結(jié)果,包括選擇使用的協(xié)議版本 version,選擇的加密套件 cipher suite,選擇的壓縮算法 compression method、隨機(jī)數(shù) random_S 以及證書。(這個(gè)證書其實(shí)就是公鑰,只是包含了很多信息,如證書的頒發(fā)機(jī)構(gòu),過期時(shí)間等等。) 客戶端驗(yàn)證證書的合法性,包括可信性,是否吊銷,過期時(shí)間和域名。(這部分工作是由客戶端的SSL/TLS來完成的,首先會(huì)驗(yàn)證公鑰是否有效,比如頒發(fā)機(jī)構(gòu),過期時(shí)間等等,如果發(fā)現(xiàn)異常,則會(huì)彈出一個(gè)警示框,提示證書存在的問題。如果證書沒有問題,那么就生成一個(gè)隨機(jī)值。然后用證書(也就是公鑰)對(duì)這個(gè)隨機(jī)值進(jìn)行加密。就好像上面說的,把隨機(jī)值用鎖頭鎖起來,這樣除非有鑰匙,不然看不到被鎖住的內(nèi)容。) 客戶端使用公匙對(duì)對(duì)稱密匙加密,發(fā)送給服務(wù)端。(這部分傳送的是用證書加密后的隨機(jī)值,目的是讓服務(wù)端得到這個(gè)隨機(jī)值,以后客戶端和服務(wù)端的通信就可以通過這個(gè)隨機(jī)值來進(jìn)行加密解密了。) 服務(wù)器用私鑰解密,拿到對(duì)稱加密的密匙。(服務(wù)端用私鑰解密后,得到了客戶端傳過來的隨機(jī)值,然后把內(nèi)容通過該隨機(jī)值進(jìn)行對(duì)稱加密,將信息和私鑰通過某種算法混合在一起,這樣除非知道私鑰,不然無法獲取內(nèi)容,而正好客戶端和服務(wù)端都知道這個(gè)私鑰,所以只要加密算法夠彪悍,私鑰夠復(fù)雜,數(shù)據(jù)就夠安全。) 傳輸加密后的信息,這部分信息就是服務(wù)端用私鑰加密后的信息,可以在客戶端用隨機(jī)值解密還原。 客戶端解密信息,客戶端用之前生產(chǎn)的私鑰解密服務(wù)端傳過來的信息,于是獲取了解密后的內(nèi)容。整個(gè)過程第三方即使監(jiān)聽到了數(shù)據(jù),也束手無策。
客戶端和服務(wù)端之間的加密機(jī)制作者:Marshall3572 鏈接:https://www.jianshu.com/p/713917b59c17 ps:如果您覺文章有用,動(dòng)動(dòng)小手點(diǎn)個(gè)在看,點(diǎn)個(gè)贊再走吧!
|