自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

從HTTP到HTTPS,原來這么簡單

原創(chuàng)
網(wǎng)絡(luò) 網(wǎng)絡(luò)管理
HTTP 是基于文本傳輸?shù)膮f(xié)議,它位于 OSI 七層模型的應(yīng)用層(Application) ,HTTP 是通過客戶端向服務(wù)器發(fā)送請(qǐng)求,服務(wù)器響應(yīng)請(qǐng)求來進(jìn)行通訊,截止到目前位置 HTTP 協(xié)議分別由 6 個(gè)獨(dú)立的協(xié)議說明組成,這 6 個(gè)協(xié)議說明分別是 RFC 7230 、 RFC 7231 、 RFC 7232 、RFC 7233 、 RFC 7234 、 RFC 7235 。

[[354426]]

【51CTO.com原創(chuàng)稿件】

 一、HTTP Begin

1、什么是 HTTP

HTTP 是基于文本傳輸?shù)膮f(xié)議,它位于 OSI 七層模型的應(yīng)用層(Application) ,HTTP 是通過客戶端向服務(wù)器發(fā)送請(qǐng)求,服務(wù)器響應(yīng)請(qǐng)求來進(jìn)行通訊,截止到目前位置 HTTP 協(xié)議分別由 6 個(gè)獨(dú)立的協(xié)議說明組成,這 6 個(gè)協(xié)議說明分別是 RFC 7230 、 RFC 7231 、 RFC 7232 、RFC 7233 、 RFC 7234 、 RFC 7235 。

說到 HTTP 就不得不說通訊報(bào)文,下面我們來看看 HTTP 通訊報(bào)文。通訊報(bào)文分為 請(qǐng)求報(bào)文和 響應(yīng)報(bào)文 。

①請(qǐng)求報(bào)文

HTTP請(qǐng)求報(bào)文通常由請(qǐng)求行(request line)、請(qǐng)求頭部(header)、空行和請(qǐng)求數(shù)據(jù)4個(gè)部分組,如下圖所示:

 

請(qǐng)求行包含請(qǐng)求方法、URL 和 HTTP 協(xié)議版本三個(gè)字段組成,在這里需要說的是 請(qǐng)求方法可以實(shí) GET、POST、HEAD、PUT、DELETE、OPTIONS、TRACE、CONNECT,但是常見的經(jīng)常用到的就是 GET、POST、DELETE和 PUT。

請(qǐng)求頭部由大量鍵值對(duì)組成,請(qǐng)求頭部的數(shù)據(jù)都是向服務(wù)器告知客戶端的信息,比較常見的請(qǐng)求頭有 User-Agent 瀏覽器類型,Accept 客戶端可識(shí)別的內(nèi)容類型列表,Host 請(qǐng)求的主機(jī)名。接下來是一個(gè)空行,它主要用來通知服務(wù)器從當(dāng)前行開始往下就不再是請(qǐng)求頭了。

請(qǐng)求數(shù)據(jù)主要是在 POST 和 PUT 方法中使用,用來向服務(wù)器提交客戶端的表單信息,一般需要配合著 Content-Type和Content-Length 使用。

②響應(yīng)報(bào)文

響應(yīng)報(bào)文也是由三部分組成,狀態(tài)行、消息報(bào)頭和響應(yīng)正文。狀態(tài)行用來告知客戶端所請(qǐng)求資源的情況,狀態(tài)行由 HTTP 版本、服務(wù)器回發(fā)響應(yīng)狀態(tài)碼和狀態(tài)碼文本描述組成。這里要說一下響應(yīng)狀態(tài)碼,狀態(tài)碼類型如下表所示:

 

上表看著響應(yīng)狀態(tài)碼很多,但是大部分在實(shí)際運(yùn)用中很少遇到,經(jīng)常遇到的狀態(tài)碼一共 7 中,如下表所示:

 

2、HTTP 致命缺點(diǎn)

HTTP 有一個(gè)致命的缺點(diǎn),就是 HTTP 的報(bào)文都是以明文的方式進(jìn)行傳輸,這樣就會(huì)導(dǎo)致中間人攻擊問題。什么是中間人攻擊了,下面我們通過圖文的形式講一下。

A 在客戶端向服務(wù)器發(fā)送了一句話“我今天很好”,這時(shí)在數(shù)據(jù)還沒有到達(dá)服務(wù)器的時(shí)候被 B 攔截到,B 將發(fā)送的內(nèi)容改為“我昨天很好”并發(fā)送給服務(wù)器,最后服務(wù)器接收到的信息就是“我昨天很好”而不是“我今天很好”。

在這里 B 就是中間人,B 所執(zhí)行的所有操作就叫做中間人攻擊,一圖勝千言我們來看圖。

 

3、HTTP 預(yù)防致命缺點(diǎn)手段

要想預(yù)防中間人攻擊我們就需要對(duì)發(fā)送的報(bào)文信息進(jìn)行加密處理,一般來說我們會(huì)采用兩種加密手段來預(yù)防中間人攻擊:對(duì)稱加密和非對(duì)稱加密。

①對(duì)稱加密

首先 A 發(fā)送一條信息告訴服務(wù)器我要和你通訊了,服務(wù)器收到這條信息后響應(yīng)一條信息告訴 A 的加密方式(例如 AES 加密)和密鑰,最后 A 用和服務(wù)器協(xié)商好的加密方式對(duì)信息進(jìn)行加密并發(fā)送,服務(wù)器收到信息后利用密鑰進(jìn)行解密即可。

 

通過上圖看出點(diǎn)什么沒?發(fā)送的內(nèi)容雖然已經(jīng)加密了,但是加密方式和密鑰依然是明文,中間人如果攔截到第一次通信的話,它就可以拿著攔截到的加密方式和密鑰就可以對(duì)后面的通信進(jìn)行解密,修改內(nèi)容后再以同樣的加密方式和密鑰進(jìn)行加密后發(fā)送個(gè)服務(wù)器。

②非對(duì)稱加密

針對(duì)前面所說的情況我們可以使用非對(duì)稱加密對(duì)密鑰進(jìn)行加密處理。同樣首先 A 發(fā)送一條信息告訴服務(wù)器我要和你通訊了,服務(wù)器收到這條信息后先利用非對(duì)稱加密(例如RSA)生成一個(gè)公鑰和一個(gè)私鑰,然后服務(wù)器將公鑰發(fā)發(fā)送給 A ,A 在本地生成一個(gè)密鑰并利用服務(wù)器發(fā)回的公鑰進(jìn)行加密,完成后發(fā)送給服務(wù)器,服務(wù)器收到后利用私鑰進(jìn)行解密得到對(duì)稱加密的密鑰,最后雙方利用約定好的加密方式和密鑰進(jìn)行通信。

到目前為止看起來不錯(cuò)密鑰和信息都加密了,應(yīng)該就沒問題了吧。真的是這樣嗎,如果真的是這樣的話 HTTPS 就沒有出現(xiàn)的必要了。

既然密鑰都加密了,那么中間人在攔截到第一次通信時(shí)可以拿到服務(wù)器發(fā)給客戶端的加密方式和公鑰,然后自己生成一個(gè)私鑰和一個(gè)公鑰,并將攔截到的服務(wù)器發(fā)來的公鑰替換成自己生成的公鑰后發(fā)送給客戶端,這時(shí)客戶端加密 AES 密鑰的公鑰就是中間人的了。

客戶端對(duì) AES 密鑰加密后發(fā)送給服務(wù)器,中間人再次攔截并利用自己的私鑰解析密文得到AES 密鑰,然后使用服務(wù)器的公鑰對(duì) AES 密鑰加密并發(fā)送給服務(wù)器。最后在客戶端和服務(wù)器的整個(gè)通訊期間中間人就可以用接獲到 AES 密鑰對(duì)信息解密并修改。

到這里一定會(huì)由同學(xué)問,這兩種方法都無法完全避免中間人攻擊,還有其他的辦法嗎?下面我們偉大的 HTTPS 就要登場了,它可以完全避免中間人攻擊。

二、HTTPS End

1.什么是 HTTPS

HTTPS 就是 HTTP 和 TLS 的簡稱,以前的 HTTPS 使用的是 SSL ,現(xiàn)在的 HTTPS 使用的是 SSL 。TLS 整體上來說和非對(duì)稱加密是一樣的,主要是對(duì) AES 密鑰加密的。

簡單來說就是 A 發(fā)送一條信息給服務(wù)器告訴服務(wù)器我要和你通信,然后服務(wù)器返回 TLS/SSL證書,客戶端在收到證書后校驗(yàn)證書的有效性,如果證書有效就生成生成 AES 密鑰并用證書中的公鑰加密,然后發(fā)送給服務(wù)器。服務(wù)器確認(rèn)收到后,就可以利用 AES 密鑰進(jìn)行加密通信了。

2.關(guān)于 CA 認(rèn)證體系

CA 認(rèn)證體系是 HTTPS 防止中間人攻擊的核心,客戶端需要對(duì)服務(wù)器發(fā)來的證書進(jìn)行安全性校驗(yàn)。那么客戶端是怎么校驗(yàn)證書的安全性呢?下面我們來講解一下。

證書都是由權(quán)威的認(rèn)證機(jī)構(gòu)頒發(fā)的,并且這些認(rèn)證機(jī)構(gòu)辦法的證書目前已經(jīng)內(nèi)置到了操作系統(tǒng)中(Windows 是這樣,其他的操作系統(tǒng)不慎了解),這些證書被稱為 CA 根證書。

當(dāng)我們的服務(wù)器需要使用 HTTPS 的時(shí)候,就需要將服務(wù)器生成的公鑰和網(wǎng)站相關(guān)信息發(fā)給權(quán)威認(rèn)證機(jī)構(gòu),然后權(quán)威認(rèn)證機(jī)構(gòu)通過服務(wù)器發(fā)送的相關(guān)信息用進(jìn)行加簽,由此得到了服務(wù)器證書,這個(gè)證書對(duì)應(yīng)的生成證書內(nèi)容的簽名,并將該這個(gè)簽名使用權(quán)威認(rèn)證機(jī)構(gòu)的私鑰進(jìn)行加密得到證書指紋,并且和上級(jí)證書生成關(guān)系鏈(上級(jí)證書最后都是 CA 根證書)。

當(dāng)客戶端收到服務(wù)器發(fā)來的證書后,首先會(huì)通過層級(jí)關(guān)系找到上級(jí)證書,然后利用上級(jí)證書里的公鑰解密服務(wù)器證書的證書指紋,解密后得到簽名。

然后通過簽名算法算出服務(wù)器證書的簽名,并對(duì)比兩個(gè)簽名是否一樣,一樣就說明服務(wù)器發(fā)來的證書是不存在問題的。

這里證書校驗(yàn)用的 RSA 是通過私鑰加密證書簽名,公鑰解密來巧妙的驗(yàn)證證書有效性的。通過 CA 認(rèn)證體系就可以避免了中間人竊取 AES 密鑰并發(fā)起攔截和修改 HTTP 通訊的報(bào)文。

三、總結(jié)

這篇文章嘮嘮叨叨的講了這么多關(guān)于 HTTP 和 HTTPS 的知識(shí),看似很基礎(chǔ)其實(shí)在很多時(shí)候我們發(fā)出去或接受到的數(shù)據(jù)不準(zhǔn)確其實(shí)就是因?yàn)橹虚g人攻擊造成的,因此我們?cè)陂_發(fā)部署網(wǎng)站的時(shí)候應(yīng)該盡可能的使用 HTTPS 。

作者:朱鋼,筆名喵叔

簡介:.NET 高級(jí)開發(fā)人員,2019 年度博客之星 20 強(qiáng),長期從事電子政務(wù)系統(tǒng)和AI客服系統(tǒng)的設(shè)計(jì)與開發(fā),目前就職于國內(nèi)某 BIM 大廠從事招投標(biāo)軟件的開發(fā)。

編輯:陶家龍

征稿:有投稿、尋求報(bào)道意向技術(shù)人請(qǐng)私信小編

【51CTO原創(chuàng)稿件,合作站點(diǎn)轉(zhuǎn)載請(qǐng)注明原文作者和出處為51CTO.com】

 

責(zé)任編輯:武曉燕 來源: 51CTO
相關(guān)推薦

2020-09-24 06:44:54

HTTPS網(wǎng)站 HTTP

2021-04-19 05:42:51

Mmap文件系統(tǒng)

2019-05-14 10:50:11

HTTP協(xié)議HttpServlet

2023-11-01 14:49:07

2017-09-12 15:26:44

2023-09-22 08:00:00

分布式鎖Redis

2016-05-09 10:27:36

MySQLHive數(shù)據(jù)遷移

2014-10-08 15:00:50

SUSE操作系統(tǒng)云計(jì)算

2019-03-15 10:55:12

通信系統(tǒng)手機(jī)

2014-11-25 15:02:01

客服系統(tǒng)

2016-03-21 11:09:52

Tableau/大數(shù)據(jù)

2010-08-02 13:55:20

2025-03-20 12:33:36

2020-10-22 08:01:52

XMLJSON轉(zhuǎn)換

2021-06-10 06:57:39

Redis存儲(chǔ)數(shù)據(jù)庫

2021-12-30 10:55:54

Python游戲腳本

2022-01-27 14:12:49

Python游戲腳本

2019-05-27 14:03:48

開發(fā)技能代碼

2022-06-21 10:10:14

HTTP協(xié)議TCP

2022-11-02 19:08:48

微服務(wù)輪詢消費(fèi)者
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)