HTTP的缺點(diǎn)
要不足表現(xiàn)在如下幾個(gè)方面:
通信使用明文(不加密)笛洛,內(nèi)容可能會被竊聽
不驗(yàn)證通信方的身份垦巴,因此可能遭遇偽裝
無法證明報(bào)文的完整性岳锁,所以有可能已被篡
通信使用明文可能被竊聽
http本身不具有加密功能凌蔬,無法做到對通信整體(使用http協(xié)議通信的請求和響應(yīng)內(nèi)容)進(jìn)行加密琳要,即:http報(bào)文使用明文(未經(jīng)加密的報(bào)文)方式傳送
TCP/IP協(xié)議族的通信機(jī)制:通信內(nèi)容在所有通信線路上都可能被窺視
應(yīng)對措施:對通信進(jìn)行加密處理防止被竊聽
加密對象:
①.通信的加密
http協(xié)議沒有加密機(jī)制闲礼,可以通過SSL(Secure Socket Layer:安全套接層)或TLS(Transport Layer Security:安全層傳輸協(xié)議)組合使用牍汹,
加密http的通信內(nèi)容,這就是常說的https(超文本傳輸安全協(xié)議)
②.內(nèi)容的加密
http協(xié)議沒有加密機(jī)制柬泽,對傳輸?shù)膬?nèi)容本身進(jìn)行加密慎菲,即報(bào)文實(shí)體主體部分;客戶端對請求報(bào)文加密處理后傳輸锨并,但前提是客戶端和服務(wù)器都具有加密和解密機(jī)制露该,
主要應(yīng)用于WEB服務(wù)中(但仍然有被篡改的風(fēng)險(xiǎn))
不驗(yàn)證通信方身份,可能遭遇偽裝
http協(xié)議中請求和響應(yīng)不會對通信方進(jìn)行確認(rèn)第煮,即存在“服務(wù)器是否是發(fā)送請求中URI真正指定的主機(jī)解幼。返回的響應(yīng)是否真的返回到實(shí)際提出請求的客戶端”等類似問題
任何人都可以發(fā)起請求,服務(wù)器只要接收到請求包警,不管對方是誰都會返回一個(gè)響應(yīng)(僅限于發(fā)送端IP和端口號沒有被WEB服務(wù)器設(shè)定限制訪問的前提下)
http協(xié)議的隱患有以下幾點(diǎn):
①.無法確定請求發(fā)送至目標(biāo)的web服務(wù)器是否是按真實(shí)意圖返回響應(yīng)的服務(wù)器撵摆;有可能是已偽裝的服務(wù)器
②.無法確定響應(yīng)返回到的客戶端是否是按真實(shí)意圖接受響應(yīng)的那個(gè)客戶端;有可能是已偽裝的客戶端
③.無法確定正在通信的對方是否具備訪問權(quán)限害晦;因?yàn)槟承﹚eb服務(wù)器保存有重要信息特铝,只發(fā)給特定用戶通信的權(quán)限
④.無法判斷請求來自何方
⑤.即使時(shí)無意義的請求也會接收,無法阻止海量請求下的D0S攻擊(Denial of Service:拒絕服務(wù)攻擊)
無法證明報(bào)文完整性壹瘟,可能已遭篡改
完整性:指信息的準(zhǔn)確度鲫剿,若無法證明其完整性,意味著無法判斷信息是否正確
http協(xié)議無法證明通信的報(bào)文完整性稻轨,因此灵莲,請求或者響應(yīng)在傳輸過程中,如果遭到篡改殴俱,是無法知道的政冻;類似這種請求或響應(yīng)傳輸中被攻擊者攔截篡改的攻擊稱為中間人攻擊(Man-in-the-Middle attack,MITM)
防止篡改:常用的方法有MD5和SHA-1等散列值校驗(yàn)的方法,以及來確認(rèn)文件的數(shù)字簽名方法
HTTP+加密+認(rèn)證+完整性保護(hù)=HTTPS
通常把添加了加密和身份認(rèn)證機(jī)制的http協(xié)議稱為https(HTTP Secure)粱挡;證書可證明服務(wù)器或者客戶端的身份赠幕, https相當(dāng)于身披SSL外殼的http 。
https并非應(yīng)用層的一種新協(xié)議询筏,而是在http通信接口部分用SSL(Secure Socket Layer:安全套接字層)和TLS(Transport Layer Security:安全層傳輸協(xié)議)協(xié)議代替
通常榕堰,http和TCP直接通信,當(dāng)使用SSL時(shí),先由http和SSL通信逆屡,再由SSL和TCP通信
SSL是獨(dú)立于http的協(xié)議圾旨,其他應(yīng)用層的如SMTP何Telnet等協(xié)議都可以配合SSL進(jìn)行使用
SSL協(xié)議
SSL協(xié)議位于TCP/IP協(xié)議與各種應(yīng)用層協(xié)議之間,為數(shù)據(jù)通訊)提供安全支持魏蔗。SSL協(xié)議可分為兩層: SSL記錄協(xié)議(SSL Record Protocol):它建立在可靠的傳輸協(xié)議(如TCP)之上砍的,為高層協(xié)議提供數(shù)據(jù)封裝、壓縮莺治、加密等基本功能的支持廓鞠。 SSL握手協(xié)議(SSL Handshake Protocol):它建立在SSL記錄協(xié)議之上,用于在實(shí)際的數(shù)據(jù)傳輸開始前谣旁,通訊雙方進(jìn)行身份認(rèn)證床佳、協(xié)商加密算法)、交換加密密鑰等榄审。
第一步砌们,客戶端發(fā)起明文請求:將自己支持的一套加密規(guī)則、以及一個(gè)隨機(jī)數(shù)(Random_C)發(fā)送給服務(wù)器搁进。
第二步浪感,服務(wù)器初步響應(yīng):服務(wù)器根據(jù)自己支持的加密規(guī)則,從客戶端發(fā)來的請求中選出一組加密算法與HASH算法饼问,生成隨機(jī)數(shù)影兽,并將自己的身份信息以證書(CA)的形式發(fā)回給瀏覽器。CA證書里面包含了服務(wù)器地址莱革,加密公鑰赢笨,以及證書的頒發(fā)機(jī)構(gòu)等信息。這時(shí)服務(wù)器給客戶端的包括選擇使用的加密規(guī)則驮吱、CA證書、一個(gè)隨機(jī)數(shù)(Random_S)萧吠。
第三步左冬,客戶端接到服務(wù)器的初步響應(yīng)后做四件事情:
(1)證書校驗(yàn): 驗(yàn)證證書的合法性(頒發(fā)證書的機(jī)構(gòu)是否合法,證書中包含的網(wǎng)站地址是否與正在訪問的地址一致等)纸型。
(2)生成密碼:瀏覽器會生成一串隨機(jī)數(shù)的密碼(Pre_master)拇砰,并用CA證書里的公鑰加密(enc_pre_master),用于傳給服務(wù)器狰腌。
(3)計(jì)算協(xié)商密鑰:
此時(shí)客戶端已經(jīng)獲取全部的計(jì)算協(xié)商密鑰需要的信息:兩個(gè)明文隨機(jī)數(shù) Random_C 和 Random_S 與自己計(jì)算產(chǎn)生的 Pre-master除破,計(jì)算得到協(xié)商密鑰enc_key。
(4)生成握手信息:使用約定好的HASH計(jì)算握手消息琼腔,并使用協(xié)商密鑰enc_key及約定好的算法對消息進(jìn)行加密瑰枫。
第四步,客戶端將第三步產(chǎn)生的數(shù)據(jù)發(fā)給服務(wù)器:
這里要發(fā)送的數(shù)據(jù)有三條:
(1)用公鑰加密過的服務(wù)器隨機(jī)數(shù)密碼enc_pre_master
(2)客戶端發(fā)給服務(wù)器的通知,”以后我們都要用約定好的算法和協(xié)商密鑰進(jìn)行通信的哦”光坝。
(3)客戶端加密生成的握手信息尸诽。
第五步,服務(wù)器接收客戶端發(fā)來的數(shù)據(jù)要做以下四件事情:(1)私鑰解密:使用自己的私鑰從接收到的enc_pre_master中解密取出密碼Pre_master盯另。
(2)計(jì)算協(xié)商密鑰:此時(shí)服務(wù)器已經(jīng)獲取全部的計(jì)算協(xié)商密鑰需要的信息:兩個(gè)明文隨機(jī)數(shù) Random_C 和 Random_S 與Pre-master性含,計(jì)算得到協(xié)商密鑰enc_key。
(3)解密握手消息:使用協(xié)商密鑰enc_key解密客戶端發(fā)來的握手消息鸳惯,并驗(yàn)證HASH是否與客戶端發(fā)來的一致商蕴。
(4)生成握手消息使用協(xié)商密鑰enc_key及約定好的算法加密一段握手消息,發(fā)送給客戶端芝发。
第六步绪商,服務(wù)器將第五步產(chǎn)生的數(shù)據(jù)發(fā)給客戶端:
這里要發(fā)的數(shù)據(jù)有兩條:
(1)服務(wù)器發(fā)給客戶端的通知,”聽你的后德,以后我們就用約定好的算法和協(xié)商密鑰進(jìn)行通信哦“部宿。
(2)服務(wù)器加密生成的握手信息。
第七步瓢湃,客戶端拿到握手信息解密理张,握手結(jié)束。
客戶端解密并計(jì)算握手消息的HASH绵患,如果與服務(wù)端發(fā)來的HASH一致雾叭,此時(shí)握手過程結(jié)束
第八步,正常加密通信
握手成功之后落蝙,所有的通信數(shù)據(jù)將由之前協(xié)商密鑰enc_key及約定好的算法進(jìn)行加密解密织狐。
HTTPS使用SSL(Secure Socket Layer:安全套接字層)和TLS(Transport Layer Security:安全層傳輸協(xié)議)這兩種協(xié)議
使用SSL時(shí),處理速度會變慢
①.通信慢:通信時(shí)候大量消耗CPU及內(nèi)存資源筏勒,相比較HTTP而已移迫,網(wǎng)絡(luò)負(fù)載可能變慢2-100倍(通信量增加)
②.加密處理:在服務(wù)器和客戶端都要進(jìn)行加密和解密,更多的消耗了服務(wù)器和客戶端硬件資源管行,導(dǎo)致負(fù)載增強(qiáng)