一废岂、簡(jiǎn)述
1??HTTP (全稱 Hyper Text Transfer Protocol),就是超文本傳輸協(xié)議铅鲤,用來(lái)在 Internet 上傳送超文本阻荒。是互聯(lián)網(wǎng)上應(yīng)用最為廣泛的一種網(wǎng)絡(luò)協(xié)議金吗,是一個(gè)客戶端和服務(wù)器端請(qǐng)求和應(yīng)答的標(biāo)準(zhǔn)(TCP)懒构,用于從 WWW 服務(wù)器傳輸超文本到本地瀏覽器的傳輸協(xié)議餐济,它可以使瀏覽器更加高效,使網(wǎng)絡(luò)傳輸減少胆剧。
2??HTTPS:安全超文本傳輸協(xié)議絮姆。簡(jiǎn)單講是 HTTP 的安全版,即 HTTP 下加入 SSL 層秩霍,HTTPS 的安全基礎(chǔ)是 SSL篙悯,因此加密的詳細(xì)內(nèi)容就需要 SSL。
HTTPS 的主要作用可以分為兩種:一種是建立一個(gè)信息安全通道铃绒,來(lái)保證數(shù)據(jù)傳輸?shù)陌踩胝眨涣硪环N就是確認(rèn)網(wǎng)站的真實(shí)性。
超文本傳輸協(xié)議 HTTP 被用于 Web 瀏覽器和網(wǎng)站服務(wù)器之間傳遞信息颠悬,HTTP 以明文方式發(fā)送內(nèi)容矮燎,不提供任何方式的數(shù)據(jù)加密,如果攻擊者截取了 Web 瀏覽器和網(wǎng)站服務(wù)器之間的傳輸報(bào)文椿疗,就可以直接讀懂其中的信息漏峰。因此糠悼,HTTP 不適合傳輸敏感信息届榄,比如:資金賬戶、密碼等倔喂。為了解決 HTTP 的這一缺陷铝条,需要使用另一種協(xié)議:安全套接字層超文本傳輸協(xié)議 HTTPS靖苇,為了數(shù)據(jù)傳輸?shù)陌踩琀TTPS 在 HTTP 的基礎(chǔ)上加入了 SSL 協(xié)議班缰,SSL 依靠證書(shū)來(lái)驗(yàn)證服務(wù)器的身份贤壁,并為瀏覽器和服務(wù)器之間的通信加密。
二埠忘、HTTP與HTTPS的區(qū)別
HTTP 傳輸?shù)臄?shù)據(jù)都是未加密的脾拆,也就是明文的,因此使用 HTTP 傳輸信息非常不安全莹妒。為了保證數(shù)據(jù)能加密傳輸名船,網(wǎng)景公司設(shè)計(jì)了 SSL(Secure Sockets Layer) 協(xié)議用于對(duì) HTTP 傳輸?shù)臄?shù)據(jù)進(jìn)行加密,從而就誕生了 HTTPS旨怠。二者主要區(qū)別如下:
1??HTTPS 需要到 ca 申請(qǐng)證書(shū)渠驼,一般免費(fèi)證書(shū)較少,因而需要一定費(fèi)用鉴腻。
2??HTTP 信息是明文傳輸迷扇,HTTPS 則是具有安全性的 ssl 加密傳輸協(xié)議。
3??HTTP 和 HTTPS 連接方式完全不同爽哎,端口也不一樣蜓席,前者是 80,后者是 443课锌。
4??HTTP 的連接很簡(jiǎn)單瓮床,是無(wú)狀態(tài)的。HTTPS 是由 SSL+HTTP 構(gòu)建的可進(jìn)行加密傳輸产镐、身份認(rèn)證的網(wǎng)絡(luò)協(xié)議隘庄,比 HTTP 安全。
三癣亚、HTTPS的工作原理
由于 HTTPS 能夠加密信息丑掺,避免敏感信息被第三方獲取,所以很多銀行網(wǎng)站或電子郵箱等等安全級(jí)別較高的服務(wù)都會(huì)采用 HTTPS述雾。客戶端在使用 HTTPS 方式與 Web 服務(wù)器通信時(shí)有以下幾個(gè)步驟街州,如圖所示。
1??客戶使用 HTTPS 的 URL 訪問(wèn) Web 服務(wù)器玻孟,要求與 Web 服務(wù)器建立 SSL 連接唆缴。
2??Web 服務(wù)器收到客戶端請(qǐng)求后,會(huì)將網(wǎng)站的證書(shū)信息(證書(shū)中包含公鑰)傳送一份給客戶端黍翎。
3??客戶端的瀏覽器與 Web 服務(wù)器開(kāi)始協(xié)商 SSL 連接的安全等級(jí)面徽,也就是信息加密的等級(jí)。
4??客戶端的瀏覽器根據(jù)雙方同意的安全等級(jí),建立會(huì)話密鑰趟紊,然后利用網(wǎng)站的公鑰將會(huì)話密鑰加密氮双,并傳送給網(wǎng)站。
5??Web 服務(wù)器利用自己的私鑰解密出會(huì)話密鑰霎匈。
6??Web 服務(wù)器利用會(huì)話密鑰加密與客戶端之間的通信戴差。
四、HTTPS的優(yōu)點(diǎn)
盡管 HTTPS 并非絕對(duì)安全铛嘱,掌握根證書(shū)的機(jī)構(gòu)暖释、掌握加密算法的組織同樣可以進(jìn)行中間人形式的攻擊,但 HTTPS 仍是現(xiàn)行架構(gòu)下最安全的解決方案墨吓,主要有以下幾個(gè)好處:
?1??使用 HTTPS 可認(rèn)證用戶和服務(wù)器饭入,確保數(shù)據(jù)發(fā)送到正確的客戶機(jī)和服務(wù)器;
2??HTTPS 是由 SSL+HTTP 構(gòu)建的可進(jìn)行加密傳輸肛真、身份認(rèn)證的網(wǎng)絡(luò)協(xié)議谐丢,要比 HTTP 安全,可防止數(shù)據(jù)在傳輸過(guò)程中不被竊取蚓让、改變乾忱,確保數(shù)據(jù)的完整性。
3??HTTPS 是現(xiàn)行架構(gòu)下最安全的解決方案历极,雖然不是絕對(duì)安全窄瘟,但它大幅增加了中間人攻擊的成本。
4??谷歌曾在2014年8月份調(diào)整搜索引擎算法趟卸,并稱“比起同等 HTTP 網(wǎng)站蹄葱,采用 HTTPS 加密的網(wǎng)站在搜索結(jié)果中的排名將會(huì)更高”。
五锄列、HTTPS的缺點(diǎn)
1??HTTPS 握手階段比較費(fèi)時(shí)图云,會(huì)使頁(yè)面的加載時(shí)間延長(zhǎng)近 50%,增加 10% 到 20% 的耗電邻邮;
2??HTTPS 連接緩存不如 HTTP 高效竣况,會(huì)增加數(shù)據(jù)開(kāi)銷和功耗,甚至已有的安全措施也會(huì)因此而受到影響筒严;
3??SSL 證書(shū)需要錢(qián)丹泉,功能越強(qiáng)大的證書(shū)費(fèi)用越高,個(gè)人網(wǎng)站鸭蛙、小網(wǎng)站沒(méi)有必要一般不會(huì)用摹恨。
4??SSL 證書(shū)通常需要綁定 IP,不能在同一 IP 上綁定多個(gè)域名娶视,IPv4 資源不可能支撐這個(gè)消耗晒哄。
5??HTTPS 的加密范圍也比較有限,在黑客攻擊、拒絕服務(wù)攻擊揩晴、服務(wù)器劫持等方面幾乎起不到什么作用勋陪。最關(guān)鍵的贪磺,SSL 證書(shū)的信用鏈體系并不安全硫兰,特別是在某些國(guó)家可以控制 CA 根證書(shū)的情況下,中間人攻擊一樣可行寒锚。
六劫映、如何將網(wǎng)站從HTTP切換到HTTPS
需要將頁(yè)面中所有的鏈接,例如 js刹前,css泳赋,圖片等等鏈接都由 HTTP 改為 HTTPS。例如:http://www.baidu.com/
改為https://www.baidu.com/
喇喉。
這里雖然將 HTTP 切換成了 HTTPS祖今,還是建議保留 HTTP。所以在切換的時(shí)候可以做 HTTP 和 HTTPS 的兼容拣技,具體實(shí)現(xiàn)方式是千诬,去掉頁(yè)面鏈接中的 HTTP 頭部,這樣可以自動(dòng)匹配 HTTP 頭和 HTTPS 頭膏斤。例如:將http://www.baidu.com/
改為//www.baidu.com
徐绑。然后當(dāng)用戶從 HTTP 的入口進(jìn)入訪問(wèn)頁(yè)面時(shí),頁(yè)面就是 HTTP莫辨,如果用戶是從 HTTPS 的入口進(jìn)入訪問(wèn)頁(yè)面傲茄,頁(yè)面即是 HTTPS 的。
七沮榜、理解HTTPS
對(duì)于這種情況盘榨,可以使用加密方案應(yīng)對(duì)。比如使用 AES 加密蟆融,服務(wù)端和客戶端先約定一個(gè)隨機(jī)生成的密鑰 key 较曼,后續(xù)的通信中,所有的信息都使用這個(gè)密鑰進(jìn)行 AES 加密:
既然都使用了不對(duì)稱加密拒担,為啥只對(duì) AES 的密鑰做不對(duì)稱加密,好像多此一舉攻询,完全可以對(duì)后續(xù)所有的通信信息全都使用不對(duì)稱加密从撼。因?yàn)椴粚?duì)稱加密相比較對(duì)稱加密性能上存在明顯的劣勢(shì),可能一個(gè)請(qǐng)求中多消耗幾 ms 或者幾 ns 無(wú)所謂钧栖,但是請(qǐng)求到達(dá)服務(wù)端是要進(jìn)行解密低零,每個(gè)請(qǐng)求都多消耗幾 ms 累計(jì)起來(lái)還是非常可怕的拯杠。
上面方案看起來(lái)很安全掏婶,中間人即使攔截到公鑰,由于不知道私鑰貌似也沒(méi)辦法解密潭陪。實(shí)際上中間人完全不需要解密信息雄妥,他可以生成一對(duì)新的公私鑰發(fā)送給客戶端,后續(xù)中間人使用自己創(chuàng)造的私鑰進(jìn)行解密依溯,然后通過(guò)服務(wù)端生成的公鑰進(jìn)行加密返回給服務(wù)端老厌,以此達(dá)到攻擊的目的:CA 證書(shū)
上面的問(wèn)題僅通過(guò)客戶端和服務(wù)端已經(jīng)沒(méi)辦法了,這時(shí)候需要引入新的第三方機(jī)構(gòu)誓沸,一個(gè)頒發(fā) CA 證書(shū)的機(jī)構(gòu)梅桩。常見(jiàn)的第三方 CA 機(jī)構(gòu)有:Symantec(賽門(mén)鐵克)、Comodo(科莫多)拜隧、GeoTrust(環(huán)度網(wǎng)信)宿百、GoDaddy、Thawte和daoRapidSSL等等洪添。
在中間人攻擊中垦页,遇到的問(wèn)題不是加密算法不夠神奇,不是密鑰方式不夠嚴(yán)謹(jǐn)干奢,而是無(wú)法向客戶端表明給到的公鑰是服務(wù)端的痊焊,是不是很像無(wú)法證明我是我的問(wèn)題。
所以第三方機(jī)構(gòu)應(yīng)運(yùn)而生忿峻,第三方機(jī)構(gòu)只做一件事情薄啥,將服務(wù)端的公鑰刻上了名字(CA 證書(shū)),客戶端接收到公鑰之后逛尚,只需要來(lái)第三方機(jī)構(gòu)這里查詢垄惧,就能知道這個(gè)公鑰是不是真的服務(wù)器,然后再將自己生成的 AES 密鑰使用 CA 證書(shū)中解密得到的公鑰進(jìn)行加密后發(fā)送給服務(wù)端绰寞。最后服務(wù)端使用私鑰解密得到 AES 密鑰到逊,就可以愉快的和客戶端進(jìn)行通信了铣口。CA 機(jī)構(gòu)驗(yàn)證不是每次都要去 CA 機(jī)構(gòu)查詢。這樣做未免太耗時(shí)觉壶,尤其是很多 CA 機(jī)構(gòu)的服務(wù)都在海外脑题,這樣一來(lái)一去消耗的時(shí)間太多了。CA 機(jī)構(gòu)高明的地方就在于铜靶,我們?nèi)フ宜?cè)公鑰叔遂,它會(huì)使用另一個(gè)來(lái)注冊(cè)的公司的私鑰對(duì)我們的公鑰加密,得到一個(gè)我們的公鑰的指紋(全球唯一)旷坦,然后將這家公司的公鑰信息(其實(shí)也是證書(shū))和我們的公鑰以及我們公鑰的指紋打包成一個(gè)證書(shū)掏熬。
當(dāng)使用 HTTPS 將證書(shū)下發(fā)給客戶端校驗(yàn)時(shí)佑稠,客戶端(比如瀏覽器)從證書(shū)中看到了上級(jí)證書(shū)的信息秒梅,恰巧這個(gè)證書(shū)就在瀏覽器(或者本機(jī))中,已經(jīng)被驗(yàn)證過(guò)是合法的舌胶,瀏覽器只要使用這個(gè)證書(shū)中的公鑰將我們的公鑰指紋進(jìn)行解密捆蜀,然后比對(duì)我們的公鑰信息就知道我們也是的合法的。因?yàn)榧僮C書(shū)中的公鑰簽名不可能被合法的上級(jí)證書(shū)中公鑰解密 幔嫂。