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