編程學(xué)習(xí)網(wǎng) > IT圈內(nèi) > 安全 > 理解 HTTPS 協(xié)議
2015
06-01

理解 HTTPS 協(xié)議

  最近我們看到很多站點(diǎn)使用 HTTPS 協(xié)議提供網(wǎng)頁(yè)服務(wù)。通常情況下我們都是在一些包含機(jī)密信息的站點(diǎn)像銀行看到 HTTPS 協(xié)議。

  如果你訪問(wèn) google,查看一下地址欄,你會(huì)看到如下信息

HTTPS protocol

  我們可以看到“https" 是綠色高亮顯示,并且前面有一個(gè)鎖標(biāo),表明網(wǎng)頁(yè)請(qǐng)求是通過(guò) https 協(xié)議。

  HTTPS 是 HTTP 協(xié)議的一個(gè)版本,在瀏覽器和服務(wù)器之間提供安全的數(shù)據(jù)傳輸。 

  瀏覽器和服務(wù)器是通過(guò) http 協(xié)議進(jìn)行通信,在使用 HTTP 協(xié)議時(shí),客戶端向服務(wù)端提交表單數(shù)據(jù)時(shí)使用的是非加密方式。

  所以當(dāng)瀏覽器和服務(wù)器通信的物理網(wǎng)絡(luò)被侵入時(shí),入侵者會(huì)得到網(wǎng)頁(yè)瀏覽器和服務(wù)器之間傳輸?shù)男畔ⅰ?/p>

HTTPS

  HTTP 的應(yīng)用場(chǎng)景是我們不需要使用高安全級(jí)別的方法加密數(shù)據(jù)。但銀行這樣的應(yīng)用會(huì)發(fā)送像信用卡詳細(xì)信息類的敏感數(shù)據(jù),這會(huì)產(chǎn)生安全威脅。如果入侵者監(jiān)視通信信道,他可以輕易獲取到底層用戶的敏感數(shù)據(jù)。

  HTTPS 保證安全可靠通信

  為了避免這樣的安全威脅,HTTPS 應(yīng)運(yùn)而生。HTTPS 是一個(gè)確保數(shù)據(jù)在 web 瀏覽器與 web 服務(wù)器之間傳輸安全的協(xié)議。

  HTTPS 是由 HTTP 協(xié)議+SSL 協(xié)議構(gòu)成。SSL 協(xié)議通過(guò)對(duì)信息進(jìn)行加密,為網(wǎng)絡(luò)通信提供安全保障。它運(yùn)用了非對(duì)稱密鑰機(jī)制,這種機(jī)制是將公鑰自由對(duì)外分發(fā),而私鑰只有信息接收者才有。

  HTTPS 對(duì)比標(biāo)準(zhǔn)的HTTP協(xié)議的兩大優(yōu)勢(shì):

  • 它確保了用戶訪問(wèn)的是正確的網(wǎng)站,這個(gè)網(wǎng)站是他原本打算訪問(wèn)的而不是一些假冒網(wǎng)站。

  • 它確保了web瀏覽器與web服務(wù)器之間通信的內(nèi)容是加密的,因此入侵者不能得到原始的通信內(nèi)容。

  所以在 HTTPS 中,SSL 起到了確保了數(shù)據(jù)在客戶端和 web 服務(wù)端傳輸安全。

  HTTPS 工作流程

  為了弄清 HTPPS 協(xié)議是怎么工作的,我們首先應(yīng)該明白加密、解密處理過(guò)程是怎么工作的。

  加密就是把文本內(nèi)容轉(zhuǎn)換成其他某種格式,這樣他人就無(wú)法解析原始內(nèi)容。

  解密就是將之前我們轉(zhuǎn)換的密文再轉(zhuǎn)換回原始內(nèi)容。

  加密和解密過(guò)程也可以用密鑰去加密和解密信息。因此,如果信息是用某個(gè)密鑰加密的,那么使用同一個(gè)密鑰就能解密。這種方式稱為對(duì)稱密鑰機(jī)制,因?yàn)槭褂玫氖峭粋€(gè)密鑰進(jìn)行加密和解密。

  假如我們用一個(gè)密鑰加密字符串,另一個(gè)密鑰來(lái)解密字符串,我們就把這個(gè)密鑰稱為非對(duì)稱密鑰。我們把用來(lái)加密字符串的密鑰稱為公鑰,而用來(lái)解密字符串的密鑰稱為私鑰。

ENCRYPTION IN HTTPS

  那么現(xiàn)在我們明白了 HTTPS 是用來(lái)安全傳輸 web 服務(wù)端與 web 瀏覽器之間的信息。這就是一個(gè)非常好的處理在傳輸信息的時(shí)候使用 HTTPS 協(xié)議。

  當(dāng)瀏覽器用 HTTPS 協(xié)議請(qǐng)求一個(gè)頁(yè)面時(shí),下面的過(guò)程也會(huì)發(fā)生:

  1.瀏覽器向 server 發(fā)出 https 請(qǐng)求,server 監(jiān)聽(tīng) 443 端口,這個(gè)端口是 web server 用來(lái)監(jiān)聽(tīng)使用了 HTTPS 協(xié)議的請(qǐng)求。

  2.一旦 web 瀏覽器與 web 服務(wù)器之間成功建立連接,SSL 握手流程就開(kāi)始了。

  在握手流程中,瀏覽器和服務(wù)器會(huì)針對(duì)數(shù)據(jù)的加密算法進(jìn)行協(xié)商并答成一致。過(guò)程如下:

  • 1. 瀏覽器向服務(wù)器發(fā)送一些自身的信息(例如其支持的SSL版本);

  • 2. 服務(wù)器響應(yīng)類似信息,例如通信過(guò)程中將要使用的SSL版本;

  • 3. 服務(wù)器會(huì)向?yàn)g覽器發(fā)送證書(shū),證書(shū)中包含了加密數(shù)據(jù)的公鑰,發(fā)布者信息,有效期以及服務(wù)端唯一標(biāo)識(shí);

  • 4. 瀏覽器核實(shí)該證書(shū),并發(fā)送信息通知服務(wù)器證書(shū)已驗(yàn)證完成;

  • 5. 瀏覽器向服務(wù)器發(fā)送“Change cipher spec”指令:瀏覽器將對(duì)數(shù)據(jù)進(jìn)行加密;

  • 6. 服務(wù)器向?yàn)g覽器發(fā)送“Change cipher spec”指令,服務(wù)端將要對(duì)待發(fā)送的數(shù)據(jù)進(jìn)行加密。

  當(dāng)我們單擊chrome中小鎖標(biāo)志,我們就可以看到服務(wù)端發(fā)送過(guò)來(lái)的數(shù)字證書(shū)。

Digital Certificate HTTPS

  3. 瀏覽器產(chǎn)生對(duì)稱的密鑰并通過(guò)服務(wù)器公鑰將其加密,隨后將加密后的密鑰發(fā)送到服務(wù)器。這個(gè)對(duì)稱的密鑰用于在整個(gè)會(huì)話中進(jìn)行加密和解密。

  我們知道數(shù)字證書(shū)是用來(lái)提供公鑰的。有兩個(gè)關(guān)鍵的術(shù)語(yǔ)用來(lái)理解數(shù)字證書(shū)。

  X.509 是一個(gè)定義數(shù)字證書(shū)格式的標(biāo)準(zhǔn),它規(guī)定了證書(shū)中需要包含哪些信息,例如下面:

  • 版本 指定 X.509 的版本

  • 序列號(hào) 唯一的一串?dāng)?shù)字用以區(qū)分證書(shū)

  • 證書(shū)發(fā)布者名稱 CA

  • 公鑰

  CA(Certification authority)表示發(fā)布該證書(shū)的機(jī)構(gòu)。只有從發(fā)布者那里才能獲得證書(shū)。證書(shū)中通常會(huì)有發(fā)布者的簽名用以保證有效性。

  原文地址:http://www.codecompiled.com/understanding-https-protocol/

掃碼二維碼 獲取免費(fèi)視頻學(xué)習(xí)資料

Python編程學(xué)習(xí)

查 看2022高級(jí)編程視頻教程免費(fèi)獲取