事物皆有兩面,HTTP也有其不足之處,如下所示舉例:
(1)通信使用明文,不加密,內(nèi)容可能會被竊聽;
(2)不驗(yàn)證通信方的身份,因此有可能遭遇偽裝;
(3)無法證明報(bào)文的完整性,所以有可能已遭篡改。
1,通信使用明文可能被竊聽
HTTP協(xié)議本身并不具備加密的功能,因此按TCP/IP協(xié)議族的工作機(jī)制,通信內(nèi)容在所有的通信線路上都有可能遭到窺視。經(jīng)過加密處理的通信,也會被窺視到通信內(nèi)容,這點(diǎn)和未加密的通信是一樣的。只是說如果通信加密,有可能讓人無法破解報(bào)文信息的含義,但是加密處理后的報(bào)文信息本身還是會被看到的。
使用抓包工具可以獲取HTTP協(xié)議的請求和響應(yīng)的內(nèi)容,并對其進(jìn)行解析。例如使用GET方法發(fā)送請求、響應(yīng)返回了200 OK,查看HTTP響應(yīng)報(bào)文的全部內(nèi)容等信息。
如何防治竊聽保護(hù)信息,最普及的就是加密技術(shù)。
通信的加密
HTTP協(xié)議中沒有加密機(jī)制,但是可以通過和SSL(Secure Socket Layer,安全套接層)或TLS(Transport Layer Security,安全層傳輸協(xié)議)的組合使用,加密HTTP的通信內(nèi)容。
用SSL建立安全通信線路之后,就可以在這條線路上進(jìn)行HTTP通信了。與SSL組合使用的HTTP被稱之為HTTPS(HTTP Secure,超文本傳輸安全協(xié)議)或HTTPover SSL。
內(nèi)容的加密
這是一種將參與通信的內(nèi)容本身加密的方式。即把HTTP報(bào)文里所含的內(nèi)容進(jìn)行加密處理,在這種情況下,客戶端需要對HTTP報(bào)文進(jìn)行加密處理后再發(fā)送請求。為了做到有效的內(nèi)容加密,客戶端和服務(wù)器應(yīng)同時具備加密和解密機(jī)制。這種方法不同于通信加密,內(nèi)容仍有可能被篡改。
2,不驗(yàn)明通信方身份就可能遭遇偽裝
HTTP協(xié)議中的請求和響應(yīng)不會對通信方進(jìn)行確認(rèn),即存在著以下幾種問題:
(1)無法確定請求發(fā)送至目標(biāo)的Web服務(wù)器是否按真實(shí)意圖返回響應(yīng)的那臺服務(wù)器。有可能是偽裝的服務(wù)器;
(2)無法確定響應(yīng)返回到的客戶端是否是按真實(shí)意圖接收響應(yīng)的那個客戶端。有可能是已偽裝的客戶端;
(3)無法確定正在通信的對方是否具備訪問權(quán)限。因?yàn)槟承¦eb服務(wù)器上保存著重要信息,只想發(fā)給特定用戶通信的權(quán)限;
(4)無法判定請求是來自何方、出自誰手;
(5)即使是無意義的請求也會照單全收,無法阻止海量請求下的DOS攻擊(拒絕服務(wù)攻擊)。
雖然HTTP協(xié)議無法確定通信方,但是如果用SSL則可以。SSL不僅提供加密處理,還可以使用一種稱為證書的手段,可以用于確定對方。證書由值得信任的第三方機(jī)構(gòu)頒發(fā),用以證明服務(wù)器和客戶端是實(shí)際存在的。只要確定通信方持有的證書,則可判斷通信方的真實(shí)意圖。另外,客戶端持有證書即可完成個人身份的確認(rèn),也可用于Web網(wǎng)站的認(rèn)證環(huán)節(jié)。
3,無法證明報(bào)文完整性,則有可能被篡改
完整性是指信息的準(zhǔn)確度,如果無法證明完整性,則無法判斷信息是否準(zhǔn)確。因此有可能出現(xiàn)中間人攻擊篡改后,服務(wù)器和客戶端仍不知情。
雖然有使用HTTP協(xié)議確定報(bào)文完整性的方法,但是這并不便捷可靠。為了有效防止其中弊端,有必要使用HTTPS。SSL提供認(rèn)證和加密處理及摘要功能。
下面我們開始介紹HTTPS的相關(guān)內(nèi)容。HTTP加上加密處理、認(rèn)證和完整性保護(hù)之后,我們定義為HTTPS(HTTP Secure)。通常在Web登錄頁面和購物結(jié)算界面等使用HTTPS通信。瀏覽器的地址欄內(nèi)為https:// 和帶鎖的標(biāo)志。另外,對HTTPS的顯示方式會因?yàn)g覽器的不同而有所改變。
HTTPS并不是應(yīng)用層的一種新協(xié)議,而是在HTTP通信接口部分用SSL和TLS協(xié)議代替。因此,HTTP不再與TCP通信,而是先和SSL通信,再由SSL和TCP通信。因此,HTTPS就是身披著SSL協(xié)議這層外殼的HTTP。這里的SSL協(xié)議是廣泛使用的應(yīng)用的網(wǎng)絡(luò)安全技術(shù)。
關(guān)于加密技術(shù),SSL采用一種叫做公開密鑰加密的加密處理方式。加密和解密都會用到密鑰。因此,如果密鑰被攻擊者獲取,那么加密就無意義了。加密和解密同用一個密鑰的方法稱為共享密鑰加密,也稱為對稱密鑰加密。
以共享密鑰方式加密時必須將密鑰也發(fā)給對方,因此這里就存在密鑰被竊聽的風(fēng)險(xiǎn)。使用公開密鑰加密方式能夠很好解決這個風(fēng)險(xiǎn)。公開密鑰加密使用一對非對稱的密鑰,一把叫私有密鑰(private key),一把叫公開密鑰(public key)。私有密鑰不能讓其他任何人知道,而公開密鑰則可以隨意發(fā)布。
HTTPS采用共享密鑰加密和公開密鑰加密兩者并用的混合加密機(jī)制。當(dāng)密鑰能夠?qū)崿F(xiàn)安全交換,則考慮僅使用公開密鑰加密來通信。因?yàn)椋⒁獾氖牵_密鑰加密處理比共享密鑰加密方式更為復(fù)雜,若在通信時使用公開密鑰加密方式,效率很低。