HTTPS,即超文本傳輸協(xié)議(全稱:Hypertext Transfer Protocol over Secure Socket Layer),是以安全為目標(biāo)的HTTP通道,簡(jiǎn)單講是HTTP的安全版。即HTTP下加入SSL層,HTTPS的安全基礎(chǔ)是SSL,因此加密的詳細(xì)內(nèi)容就需要SSL。 它是一個(gè)URI scheme(抽象標(biāo)識(shí)符體系),句法類同http:體系。用于安全的HTTP數(shù)據(jù)傳輸。https:URL表明它使用了HTTP,但HTTPS存在不同于HTTP的默認(rèn)端口及一個(gè)加密/身份驗(yàn)證層(在HTTP與TCP之間)。這個(gè)系統(tǒng)的初研發(fā)由網(wǎng)景公司進(jìn)行,提供了身份驗(yàn)證與加密通訊方法,現(xiàn)在它被廣泛用于萬(wàn)維網(wǎng)上安全敏感的通訊,例如交易支付方面。
HTTPS其實(shí)是有兩部分組成:HTTP + SSL / TLS,也就是在HTTP上又加了一層處理加密信息的模塊。服務(wù)端和客戶端的信息傳輸都會(huì)通過(guò)TLS進(jìn)行加密,所以傳輸?shù)臄?shù)據(jù)都是加密后的數(shù)據(jù)。
HTTPS詳解
1. 客戶端發(fā)起HTTPS請(qǐng)求。這個(gè)沒(méi)什么好說(shuō)的,就是用戶在瀏覽器里輸入一個(gè)https網(wǎng)址,然后連接到server的443端口。
2. 服務(wù)端的配置
采用HTTPS協(xié)議的服務(wù)器必須要有一套數(shù)字證書,可以自己制作,也可以向組織申請(qǐng)。區(qū)別就是自己頒發(fā)的證書需要客戶端驗(yàn)證通過(guò),才可以繼續(xù)訪問(wèn),而使用受信任的公司申請(qǐng)的證書則不會(huì)彈出提示頁(yè)面(startssl就是個(gè)不錯(cuò)的選擇,有1年的免費(fèi)服務(wù))。這套證書其實(shí)就是一對(duì)公鑰和私鑰。如果對(duì)公鑰和私鑰不太理解,可以想象成一把鑰匙和一個(gè)鎖頭,只是全世界只有你一個(gè)人有這把鑰匙,你可以把鎖頭給別人,別人可以用這個(gè)鎖把重要的東西鎖起來(lái),然后發(fā)給你,因?yàn)橹挥心阋粋€(gè)人有這把鑰匙,所以只有你才能看到被這把鎖鎖起來(lái)的東西。
3. 傳送證書。這個(gè)證書其實(shí)就是公鑰,只是包含了很多信息,如證書的頒發(fā)機(jī)構(gòu),過(guò)期時(shí)間等等。
4. 客戶端解析證書
這部分工作是有客戶端的TLS來(lái)完成的,首先會(huì)驗(yàn)證公鑰是否有效,比如頒發(fā)機(jī)構(gòu),過(guò)期時(shí)間等等,如果發(fā)現(xiàn)異常,則會(huì)彈出一個(gè)警告框,提示證書存在問(wèn)題。如果證書沒(méi)有問(wèn)題,那么就生成一個(gè)隨機(jī)值。然后用證書對(duì)該隨機(jī)值進(jìn)行加密。就好像上面說(shuō)的,把隨機(jī)值用鎖頭鎖起來(lái),這樣除非有鑰匙,不然看不到被鎖住的內(nèi)容。
5. 傳送加密信息
這部分傳送的是用證書加密后的隨機(jī)值,目的就是讓服務(wù)端得到這個(gè)隨機(jī)值,以后客戶端和服務(wù)端的通信就可以通過(guò)這個(gè)隨機(jī)值來(lái)進(jìn)行加密解密了。
6. 服務(wù)段解密信息
服務(wù)端用私鑰解密后,得到了客戶端傳過(guò)來(lái)的隨機(jī)值(私鑰),然后把內(nèi)容通過(guò)該值進(jìn)行對(duì)稱加密。所謂對(duì)稱加密就是,將信息和私鑰通過(guò)某種算法混合在一起,這樣除非知道私鑰,不然無(wú)法獲取內(nèi)容,而正好客戶端和服務(wù)端都知道這個(gè)私鑰,所以只要加密算法夠彪悍,私鑰夠復(fù)雜,數(shù)據(jù)就夠安全。
7. 傳輸加密后的信息。這部分信息是服務(wù)段用私鑰加密后的信息,可以在客戶端被還原。
8. 客戶端解密信息??蛻舳擞弥吧傻乃借€解密服務(wù)段傳過(guò)來(lái)的信息,于是獲取了解密后的內(nèi)容。整個(gè)過(guò)程第三方即使監(jiān)聽到了數(shù)據(jù),也束手無(wú)策。
HTTPS的作用及局限性:
與HTTP的差異
與HTTP的URL由“http://”起始且默認(rèn)使用端口80不同,HTTPS的URL由“https://”起始且默認(rèn)使用端口443。
HTTP是不安全的,且攻擊者通過(guò)監(jiān)聽和中間人攻擊等手段,可以獲取網(wǎng)站帳戶和敏感信息等。HTTPS被設(shè)計(jì)為可防止前述攻擊,并(在沒(méi)有使用舊版本的SSL時(shí))被認(rèn)為是安全的。
網(wǎng)絡(luò)層
HTTP工作在應(yīng)用層(OSI模型的高層),但安全協(xié)議工作在一個(gè)較低的子層:在HTTP報(bào)文傳輸前對(duì)其加密,并在到達(dá)時(shí)對(duì)其解密。嚴(yán)格地講,HTTPS并不是一個(gè)單獨(dú)的協(xié)議,而是對(duì)工作在一加密連接(TLS或SSL)上的常規(guī)HTTP協(xié)議的稱呼。
HTTPS報(bào)文中的任何東西都被加密,包括所有報(bào)頭和荷載。除了可能的CCA(參見限制小節(jié))之外,一個(gè)攻擊者所能知道的只有在兩者之間有一連接這一事實(shí)。
服務(wù)器設(shè)置
要使一網(wǎng)絡(luò)服務(wù)器準(zhǔn)備好接受HTTPS連接,管理員必須創(chuàng)建一數(shù)字證書,并交由證書頒發(fā)機(jī)構(gòu)簽名以使瀏覽器接受。證書頒發(fā)機(jī)構(gòu)會(huì)驗(yàn)證數(shù)字證書持有人和其聲明的為同一人。瀏覽器通常都預(yù)裝了證書頒發(fā)機(jī)構(gòu)的證書,所以他們可以驗(yàn)證該簽名。
獲得證書
由證書頒發(fā)機(jī)構(gòu)簽發(fā)的證書有免費(fèi)的,也有每年收費(fèi)13美元到1500美元不等的。
一個(gè)組織也可能有自己的證書頒發(fā)機(jī)構(gòu),尤其是當(dāng)設(shè)置瀏覽器來(lái)訪問(wèn)他們自己的網(wǎng)站時(shí)(如,運(yùn)行在公司局域網(wǎng)內(nèi)的網(wǎng)站,或大學(xué)的)。他們可以容易地將自己的證書加入瀏覽器中。
此外,還存在一個(gè)人到人的證書頒發(fā)機(jī)構(gòu),CAcert。
作為訪問(wèn)控制
HTTPS也可被用作客戶端認(rèn)證手段來(lái)將一些信息限制給合法的用戶。要做到這樣,管理員通常會(huì)給每個(gè)用戶創(chuàng)建證書(通常包含了用戶的名字和電子郵件地址)。這個(gè)證書會(huì)被放置在瀏覽器中,并在每次連接到服務(wù)器時(shí)由服務(wù)器檢查。
當(dāng)私鑰失密時(shí)
證書可在其過(guò)期前被吊銷,通常情況是該證書的私鑰已經(jīng)失密。較新的瀏覽器如Google Chrome、Firefox[7]、Opera[8]和運(yùn)行在Windows Vista上的Internet Explorer[9]都實(shí)現(xiàn)了在線證書狀態(tài)協(xié)議(英語(yǔ):Online Certificate Status Protocol)(OCSP)以排除這種情形:瀏覽器將網(wǎng)站提供的證書的序列號(hào)通過(guò)OCSP發(fā)送給證書頒發(fā)機(jī)構(gòu),后者會(huì)告訴瀏覽器證書是否還是有效的。
局限
TLS有兩種策略:簡(jiǎn)單策略和交互策略。交互策略更為安全,但需要用戶在他們的瀏覽器中安裝個(gè)人的證書來(lái)進(jìn)行認(rèn)證。
不管使用了哪種策略,協(xié)議所能提供的保護(hù)總強(qiáng)烈地依賴于瀏覽器的實(shí)現(xiàn)和服務(wù)器軟件所支持的加密算法。
HTTPS并不能防止站點(diǎn)被搜索引擎蜘蛛抓取。在某些情形中,被加密資源的URL可僅通過(guò)截獲請(qǐng)求和響應(yīng)的大小推得,這就可使攻擊者同時(shí)知道明文(公開的靜態(tài)內(nèi)容)和密文(被加密過(guò)的明文),從而使選擇密文攻擊成為可能。
因?yàn)镾SL在HTTP之下工作,對(duì)上層協(xié)議一無(wú)所知,所以SSL服務(wù)器只能為一個(gè)IP地址/端口組合提供一個(gè)證書。[12]這就意味著在大部分情況下,使用HTTPS的同時(shí)支持基于名字的虛擬主機(jī)是不很現(xiàn)實(shí)的。一種叫Server Name Indication(英語(yǔ):Server Name Indication)(SNI)的方案通過(guò)在加密連接創(chuàng)建前向服務(wù)器發(fā)送主機(jī)名解決了這一問(wèn)題。Firefox 2、Opera 8和運(yùn)行在Windows Vista的Internet Explorer 7都加入了對(duì)SNI的支持。
如果Mac OS X中的家長(zhǎng)控制被啟用,HTTPS站點(diǎn)必須顯式地在“總是允許”列表中列出。