前言
一直以來想總結(jié)下HTTPS和HTTP的區(qū)別苦囱,近來看了些相關(guān)資料,在此總結(jié)下脾猛。首先給出參考的資料撕彤,并表示感謝:
http://www.reibang.com/p/37654eb66b58
http://www.codeceo.com/article/differ-between-https-and-http.html
《圖解HTTP》(感覺寫的不錯(cuò),推薦~)
下面進(jìn)入正題猛拴,一句話總結(jié)下:HTTP效率更高羹铅,HTTPS安全性更高。
1愉昆、幾個(gè)概念
1-1 什么是HTTP
HTTP是一個(gè)客戶端終端(用戶)和服務(wù)器端(網(wǎng)站)請求和應(yīng)答的標(biāo)準(zhǔn)(TCP)职员。通過使用網(wǎng)頁瀏覽器、網(wǎng)絡(luò)爬蟲或者其它的工具撼唾,客戶端發(fā)起一個(gè)HTTP請求到服務(wù)器上指定端口(默認(rèn)端口為80)廉邑。我們稱這個(gè)客戶端為用戶代理程序(user agent)哥蔚。應(yīng)答的服務(wù)器上存儲(chǔ)著一些資源,比如HTML文件和圖像蛛蒙。我們稱這個(gè)應(yīng)答服務(wù)器為源服務(wù)器(origin server)糙箍。在用戶代理和源服務(wù)器中間可能存在多個(gè)“中間層”,比如代理服務(wù)器牵祟、網(wǎng)關(guān)或者隧道(tunnel)深夯。
盡管TCP/IP協(xié)議是互聯(lián)網(wǎng)上最流行的應(yīng)用,HTTP協(xié)議中诺苹,并沒有規(guī)定必須使用它或它支持的層咕晋。事實(shí)上,HTTP可以在任何互聯(lián)網(wǎng)協(xié)議上收奔,或其他網(wǎng)絡(luò)上實(shí)現(xiàn)掌呜。HTTP假定其下層協(xié)議提供可靠的傳輸。因此坪哄,任何能夠提供這種保證的協(xié)議都可以被其使用质蕉。因此也就是其在TCP/IP協(xié)議族使用TCP作為其傳輸層。
通常翩肌,由HTTP客戶端發(fā)起一個(gè)請求模暗,創(chuàng)建一個(gè)到服務(wù)器指定端口(默認(rèn)是80端口)的TCP連接。HTTP服務(wù)器則在那個(gè)端口監(jiān)聽客戶端的請求念祭。一旦收到請求兑宇,服務(wù)器會(huì)向客戶端返回一個(gè)狀態(tài),比如"HTTP/1.1 200 OK"粱坤,以及返回的內(nèi)容隶糕,如請求的文件、錯(cuò)誤消息比规、或者其它信息若厚。
1-2 什么是SSL
SSL是Netscape公司所提出的安全保密協(xié)議,在瀏覽器(如Internet Explorer蜒什、Netscape Navigator)和Web服務(wù)器(如Netscape的Netscape Enterprise Server测秸、ColdFusion Server等等)之間構(gòu)造安全通道來進(jìn)行數(shù)據(jù)傳輸,SSL運(yùn)行在TCP/IP層之上灾常、應(yīng)用層之下霎冯,為應(yīng)用程序提供加密數(shù)據(jù)通道,它采用了RC4钞瀑、MD5 以及RSA等加密算法沈撞,使用40 位的密鑰,適用于商業(yè)信息的加密雕什。SSL包含記錄層(Record Layer)和傳輸層缠俺,記錄層協(xié)議確定傳輸層數(shù)據(jù)的封裝格式显晶。傳輸層安全協(xié)議使用X.509認(rèn)證,之后利用非對稱加密演算來對通信方做身份認(rèn)證壹士,之后交換對稱密鑰作為會(huì)談密鑰(Session key)磷雇。這個(gè)會(huì)談密鑰是用來將通信兩方交換的數(shù)據(jù)做加密,保證兩個(gè)應(yīng)用間通信的保密性和可靠性躏救,使客戶與服務(wù)器應(yīng)用之間的通信不被攻擊者竊聽唯笙。
1-3 什么是HTTPS
HTTPS(Secure Hypertext Transfer Protocol)安全超文本傳輸協(xié)議,它是一個(gè)安全通信通道盒使,它基于HTTP開發(fā)崩掘,用于在客戶計(jì)算機(jī)和服務(wù)器之間交換信息。它使用安全套接字層(SSL)進(jìn)行信息交換少办,簡單來說它是HTTP的安全版苞慢。 它是由Netscape開發(fā)并內(nèi)置于其瀏覽器中,用于對數(shù)據(jù)進(jìn)行壓縮和解壓操作英妓,并返回網(wǎng)絡(luò)上傳送回的結(jié)果枉疼。HTTPS實(shí)際上應(yīng)用了Netscape的安全套接字層(SSL)作為HTTP應(yīng)用層的子層。(HTTPS使用端口443鞋拟,而不是象HTTP那樣使用端口80來和TCP/IP進(jìn)行通信。)SSL使 用40 位關(guān)鍵字作為RC4流加密算法惹资,這對于商業(yè)信息的加密是合適的贺纲。HTTPS和SSL支持使用X.509數(shù)字認(rèn)證,如果需要的話用戶可以確認(rèn)發(fā)送者是誰褪测。
2猴誊、如何加密
SSL采用一種叫做公開密鑰加密(Public-key cryptography)的加密方式。近代的加密方法中侮措,加密算法是公開的懈叹,而秘鑰是保密的,通過這種方式得以保持加密方法的安全性分扎。
2-1 共享密鑰加密的困境
加密和解密同用一個(gè)密鑰的方式稱為共享密鑰加密澄成, 也被叫做對稱密鑰加密。共享加密方式加密時(shí)必須將密鑰也發(fā)給對方畏吓,在互聯(lián)網(wǎng)上轉(zhuǎn)發(fā)密鑰時(shí)墨状,如果通信被監(jiān)聽那么密鑰就會(huì)落入攻擊者之手,同時(shí)也就失去了加密的意義菲饼。
那怎么才能安全的轉(zhuǎn)交肾砂?
2-2 使用兩把密鑰的公開密鑰加密
公開密鑰加密方式很好地解決了共享密鑰加密的困難。公開密鑰加密使用一對非對稱的密鑰宏悦,一把叫做私有密鑰镐确,另一把叫做公開密鑰包吝。
使用公開密鑰加密方式,發(fā)送密文的一方使用對方的公開密鑰進(jìn)行加密處理源葫,對方收到被加密的信息后诗越,在使用自己的私有密鑰進(jìn)行解密。利用這種方式臼氨,不需要發(fā)送用來解密的私有密鑰掺喻,也不用擔(dān)心密鑰被攻擊者竊聽而盜走。
另外储矩,要想根據(jù)密文和公開密鑰感耙,恢復(fù)到信息原文是異常困難的,因?yàn)榻饷苓^程就是在對離散對數(shù)進(jìn)行求值持隧,這并非輕而易舉就能辦到的即硼。退一步講,如果能對一個(gè)非常大的整數(shù)做到快速地因式分解屡拨,那么密碼還是在存在希望的只酥,但就目前的技術(shù)來看是不太現(xiàn)實(shí)的。
2-3 HTTPS采用混合加密機(jī)制
HTTPS采用共享秘鑰加密和公開秘鑰加密兩者并用的混合加密機(jī)制呀狼。若密鑰能夠?qū)崿F(xiàn)安全交換裂允,那么有可能會(huì)考慮僅適用公開密鑰加密來通信。但是公開密鑰加密和共享密鑰加密相比哥艇,其處理速度要慢绝编。
所以應(yīng)充分利用兩者各自優(yōu)勢,將多種方法組合起來用于通信貌踏。在交換密鑰環(huán)節(jié)適用公開密鑰加密方式十饥,之后的建立通信交換報(bào)文階段則使用共享密鑰加密方式。
2-4 證明公開密鑰的正確性的證書
遺憾的是祖乳,公開密鑰加密方式還是存在一些問題的逗堵,那就是無法證明公開密鑰本身就是貨真價(jià)實(shí)的公開密鑰。比如眷昆,正準(zhǔn)備和某臺(tái)服務(wù)器建立公開密鑰加密方式下的通信時(shí)蜒秤,如何證明收到的公開密鑰就是原本預(yù)想的那臺(tái)服務(wù)器發(fā)行的公開密鑰⊙钦或許在公開密鑰傳輸途中垦藏,真正的公開密鑰已經(jīng)被攻擊者替換了。
為了解決上述問題伞访,可以使用有數(shù)字證書認(rèn)證機(jī)構(gòu)和其他相關(guān)機(jī)關(guān)頒發(fā)的公開密鑰證書掂骏,基本流程為:
- 服務(wù)器把自己的公開密鑰登錄至數(shù)字證書認(rèn)證機(jī)構(gòu)
- 數(shù)字證書認(rèn)證機(jī)構(gòu)用自己的私有密鑰向服務(wù)器的公開密鑰署數(shù)字簽名并頒發(fā)公鑰證書
- 客戶端拿到服務(wù)器的公鑰證書后, 使用數(shù)字證書認(rèn)證機(jī)構(gòu)的公開密鑰, 向數(shù)字證書認(rèn)證機(jī)構(gòu)驗(yàn)證公鑰證書上的數(shù)字簽名, 以確認(rèn)服務(wù)器的公開密鑰的真實(shí)性
- 使用服務(wù)器的公開密鑰對報(bào)文加密后發(fā)送
- 服務(wù)器用私有密鑰對報(bào)文解密
3、HTTP+加密+認(rèn)證+完整性保護(hù) = HTTPS
HTTPS并非是應(yīng)用層的一種新協(xié)議厚掷。只是HTTP通信接口部分用SSL(Secure Socket Layer)和TLS (Transport Layer Security) 協(xié)議替代而已弟灼。
通常级解,HTTP直接和TCP通信。當(dāng)使用SSL時(shí)田绑,演變成了先和SSL通信勤哗,再由SSL和TCP通信了。簡而言之掩驱,所謂HTTPS芒划,其實(shí)就是身披SSL協(xié)議的這層外殼的HTTP。
在采用SSL后欧穴,HTTP就擁有了HTTPS的加密民逼,證書和完整性的保護(hù)這些功能。
SSL是獨(dú)立于HTTP的協(xié)議涮帘,所有不光是HTTP協(xié)議拼苍, 其他運(yùn)行在應(yīng)用層的SMTP(郵件協(xié)議)和Telnet等協(xié)議均可配合SSL協(xié)議使用〉饔В可以說SSL是當(dāng)今世界上應(yīng)用最廣泛的網(wǎng)絡(luò)安全技術(shù)疮鲫。
4、效率
HTTPS協(xié)議使用SSL在發(fā)送方把原始數(shù)據(jù)進(jìn)行加密弦叶,然后在接受方進(jìn)行解密俊犯,加密和解密需要發(fā)送方和接受方通過交換共知的密鑰來實(shí)現(xiàn)。因此伤哺,所傳送的數(shù)據(jù)不容易被網(wǎng)絡(luò)黑客截獲和解密瘫析。 然而,加密和解密過程需要耗費(fèi)系統(tǒng)大量的開銷默责,嚴(yán)重降低機(jī)器的性能,相關(guān)測試數(shù)據(jù)表明使用HTTPS協(xié)議傳輸數(shù)據(jù)的工作效率只有使用HTTP協(xié)議傳輸?shù)氖种幌贪<偃鐬榱税踩C芴倚颍瑢⒁粋€(gè)網(wǎng)站所有的Web應(yīng)用都啟用SSL技術(shù)來加密,并使用HTTPS協(xié)議進(jìn)行傳輸烂瘫,那么該網(wǎng)站的性能和效率將會(huì)大大降低媒熊。而且沒有這個(gè)必要,因?yàn)橐话銇碚f并不是所有數(shù)據(jù)都要求那么高的安全保密級(jí)別坟比。所以芦鳍,我們只需對那些涉及機(jī)密數(shù)據(jù)的交互處理使用HTTPS協(xié)議,這樣就做到魚與熊掌兼得葛账。