官术网_书友最值得收藏!

第2章
爬蟲(chóng)開(kāi)發(fā)基礎(chǔ)

2.1 HTTP與HTTPS

HTTP(Hyper Text Transfer Protocol,超文本傳輸協(xié)議)是一個(gè)客戶端和服務(wù)器端請(qǐng)求和應(yīng)答的標(biāo)準(zhǔn)(TCP)。客戶端是終端用戶,服務(wù)器端是網(wǎng)站。通過(guò)使用Web瀏覽器、網(wǎng)絡(luò)爬蟲(chóng)或者其他工具,客戶端發(fā)起一個(gè)到服務(wù)器上指定端口(默認(rèn)端口為80)的HTTP請(qǐng)求,這個(gè)客戶端叫用戶代理(User Agent)。響應(yīng)的服務(wù)器上存儲(chǔ)著資源,比如HTML文件和圖像,這個(gè)服務(wù)器為源服務(wù)器(Origin Server),在用戶代理和服務(wù)器中間可能存在多個(gè)中間層,比如代理、網(wǎng)關(guān)或者隧道(Tunnels)。

通常,由HTTP客戶端發(fā)起一個(gè)請(qǐng)求,建立一個(gè)到服務(wù)器指定端口(默認(rèn)是80端口)的TCP連接,HTTP服務(wù)器則在那個(gè)端口監(jiān)聽(tīng)客戶端發(fā)送過(guò)來(lái)的請(qǐng)求,一旦收到請(qǐng)求,服務(wù)器(向客戶端)發(fā)回一個(gè)狀態(tài)行(比如"HTTP/1.1 200 OK")和(響應(yīng)的)消息,消息的消息體可能是請(qǐng)求的文件、錯(cuò)誤消息或者其他一些信息。

在瀏覽器的地址欄輸入的網(wǎng)站地址叫作URL(Uniform Resource Locator,統(tǒng)一資源定位符)。就像每家每戶都有一個(gè)門牌地址一樣,每個(gè)網(wǎng)頁(yè)也都有一個(gè)Internet地址。在瀏覽器的地址框中輸入一個(gè)URL或單擊一個(gè)超級(jí)URL時(shí),URL就確定了要瀏覽的地址,向服務(wù)器發(fā)送一次請(qǐng)求,瀏覽器通過(guò)超文本傳輸協(xié)議(HTTP)傳送到服務(wù)器,服務(wù)器根據(jù)請(qǐng)求頭做出相應(yīng)的響應(yīng),將響應(yīng)數(shù)據(jù)返回到客戶端,客戶端收到響應(yīng)內(nèi)容后,通過(guò)瀏覽器翻譯成網(wǎng)頁(yè)。

HTTP協(xié)議傳輸?shù)臄?shù)據(jù)都是未加密的,也就是明文的數(shù)據(jù),因此使用HTTP協(xié)議傳輸隱私信息非常不安全。為了保證這些隱私數(shù)據(jù)能加密傳輸,于是網(wǎng)景公司設(shè)計(jì)了SSL(Secure Sockets Layer)協(xié)議用于對(duì)HTTP協(xié)議傳輸?shù)臄?shù)據(jù)進(jìn)行加密,從而誕生了HTTPS。

HTTPS(Hyper Text Transfer Protocol orer Secure Sokcket Layer,可以理解為HTTP+SSL/TLS)在傳輸數(shù)據(jù)之前需要客戶端(瀏覽器)與服務(wù)端(網(wǎng)站)之間進(jìn)行一次握手,在握手過(guò)程中將確立雙方加密傳輸數(shù)據(jù)的密碼信息。HTTP與HTTPS的主要區(qū)別可參考圖2-1所示。

圖2-1 HTTP與HTTPS的區(qū)別

HTTPS的SSL中使用了非對(duì)稱加密、對(duì)稱加密以及HASH算法。握手過(guò)程的簡(jiǎn)單描述如下:

(1)瀏覽器將自己支持的一套加密規(guī)則發(fā)送給網(wǎng)站。

(2)網(wǎng)站從中選出一組加密算法與HASH算法,并將自己的身份信息以證書(shū)的形式發(fā)回給瀏覽器。證書(shū)里面包含網(wǎng)站地址、加密公鑰以及證書(shū)的頒發(fā)機(jī)構(gòu)等信息。

(3)獲得網(wǎng)站證書(shū)之后瀏覽器要做以下工作:

①驗(yàn)證證書(shū)的合法性(如頒發(fā)證書(shū)的機(jī)構(gòu)是否合法、證書(shū)中包含的網(wǎng)站地址是否與正在訪問(wèn)的地址一致等),如果證書(shū)受信任,瀏覽器欄就會(huì)顯示一個(gè)小鎖頭,否則會(huì)給出證書(shū)不受信任的提示。

②如果證書(shū)受信任或者用戶接受了不受信任的證書(shū),瀏覽器就會(huì)生成一串隨機(jī)數(shù)的密碼,并用證書(shū)中提供的公鑰加密。

③使用約定好的HASH計(jì)算握手消息,并使用生成的隨機(jī)數(shù)對(duì)消息進(jìn)行加密,最后將之前生成的所有信息發(fā)送給網(wǎng)站。

(4)網(wǎng)站接收瀏覽器發(fā)來(lái)的數(shù)據(jù)之后要做以下操作:

①使用自己的私鑰將信息解密并取出密碼,使用密碼解密瀏覽器發(fā)來(lái)的握手消息,并驗(yàn)證HASH是否與瀏覽器發(fā)來(lái)的一致。

②使用密碼加密一段握手消息,發(fā)送給瀏覽器。

(5)如果瀏覽器解密并計(jì)算握手消息的HASH與服務(wù)端發(fā)來(lái)的HASH一致,此時(shí)握手過(guò)程結(jié)束,之后所有的通信數(shù)據(jù)將使用之前瀏覽器生成的隨機(jī)密碼,并利用對(duì)稱加密算法進(jìn)行加密。

瀏覽器與網(wǎng)站互相發(fā)送加密的握手消息并驗(yàn)證,目的是保證雙方都獲得一致的密碼,并且可以正常地加密、解密數(shù)據(jù),為真正數(shù)據(jù)的傳輸做一次測(cè)試。另外,HTTPS一般使用的加密與HASH算法如下。

(1)非對(duì)稱加密算法:RSA、DSA/DSS。

(2)對(duì)稱加密算法:AES、RC4、3DES。

(3)HASH算法:MD5、SHA1、SHA256。

其中,非對(duì)稱加密算法用于在握手過(guò)程中加密生成的密碼,對(duì)稱加密算法用于對(duì)真正傳輸?shù)臄?shù)據(jù)進(jìn)行加密,而HASH算法用于驗(yàn)證數(shù)據(jù)的完整性。由于瀏覽器生成的密碼是整個(gè)數(shù)據(jù)加密的關(guān)鍵,因此在傳輸?shù)臅r(shí)候使用非對(duì)稱加密算法對(duì)其加密。非對(duì)稱加密算法會(huì)生成公鑰和私鑰,公鑰只能用于加密數(shù)據(jù),可以隨意傳輸,而網(wǎng)站的私鑰用于對(duì)數(shù)據(jù)進(jìn)行解密,所以網(wǎng)站都會(huì)非常小心地保管自己的私鑰,防止泄漏。

SSL握手過(guò)程中有任何錯(cuò)誤都會(huì)使加密連接斷開(kāi),從而阻止隱私信息的傳輸,正是由于HTTPS非常安全,攻擊者無(wú)法從中找到下手的地方,因此更多地采用假證書(shū)的手法來(lái)欺騙客戶端,從而獲取明文的信息。

主站蜘蛛池模板: 信宜市| 陵川县| 大理市| 阜新| 塘沽区| 家居| 佳木斯市| 漠河县| 肇东市| 涡阳县| 阜宁县| 江阴市| 太谷县| 台南县| 毕节市| 通海县| 广安市| 宁阳县| 河北区| 武鸣县| 乳源| 巴东县| 侯马市| 边坝县| 抚顺市| 贡嘎县| 霍州市| 景德镇市| 出国| 上高县| 米林县| 玉田县| 江西省| 鹤庆县| 卢龙县| 宝鸡市| 论坛| 咸宁市| 海原县| 军事| 江阴市|