第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

首頁(yè) 慕課教程 HTTP 入門教程 HTTP 入門教程 HTTP 協(xié)議和 HTTPS 協(xié)議的對(duì)比

HTTP 協(xié)議和 HTTPS 協(xié)議的對(duì)比

在前面的章節(jié)中我們對(duì) Http 已經(jīng)有了一個(gè)很全面的了解,Http 在滿足通信的基本功能外,也提供了很多豐富的交互功能,但是在安全性方面,Http 還有很多不足的地方,Https 就是為了解決這個(gè)問(wèn)題而誕生。目前 google / 蘋果 / 騰訊的小程序接口都強(qiáng)制要求使用 Https 安全協(xié)議。以后的網(wǎng)站全面采用 Https 協(xié)議已經(jīng)是一個(gè)可以遇見(jiàn)的趨勢(shì)了。

1. HTTP 不足

1.1 明文傳輸

Http 的整個(gè)報(bào)文信息,從客戶端到服務(wù)端到都是明文傳輸?shù)?。信息從我們的電腦發(fā)出去,中間需要經(jīng)歷哪些設(shè)備才能被另一臺(tái)電腦接收,我們是不好確定也很難評(píng)估的。有可能跨越多個(gè)運(yùn)營(yíng)商機(jī)房,有可能通過(guò)海底光纜橫跨大洋,有可能穿過(guò) 某某學(xué)校 / 某某廠房 / 某某集團(tuán) 的內(nèi)部 路由器/ 交換機(jī) / 集線器 等。中間這么多節(jié)點(diǎn)我們都是控制不到的,所以只要?jiǎng)e人有心,我們就很難保證我們的信息不被泄漏。

網(wǎng)絡(luò)傳輸

1.2 沒(méi)有驗(yàn)證通信方身份

通信雙方無(wú)法確認(rèn)對(duì)方的身份是否正確。

案例1:
本地電腦有木馬,路由表被踹改,www.baidu.com 的域名被解析到另一臺(tái)虛假的服務(wù)器,此時(shí)你在瀏覽器訪問(wèn)的百度就是黑客的另一個(gè)釣魚(yú)網(wǎng)站,然后給你推送了很多虛假消息,此時(shí)客戶端很難知情。

案例2:
路由表沒(méi)問(wèn)題,但是目標(biāo)服務(wù)器被人黑了,處理不了請(qǐng)求,此時(shí)有其它服務(wù)冒充提供服務(wù)。
偽裝

案例3:
某個(gè)資源只有特定用戶有查詢的權(quán)限,黑客通過(guò)偽造該客戶端一樣的請(qǐng)求來(lái)查詢,服務(wù)端只是簡(jiǎn)單的根據(jù)入?yún)⑴袛?,并無(wú)法知道對(duì)應(yīng)客戶端的真實(shí)性,于是消息很容易泄漏。

1.3 無(wú)法保證數(shù)據(jù)完整性

消息篡改

  1. 客戶端 A 像服務(wù)端 B 充值 100。
  2. A 的網(wǎng)絡(luò)報(bào)文被黑客竊取了,修改了中間的金額,后面繼續(xù)把報(bào)文傳向 B,此時(shí)就造成了嚴(yán)重的金額損失。

上面的例子如果沒(méi)有做數(shù)據(jù)完整性校驗(yàn)就很容易被攻陷。當(dāng)然很多系統(tǒng)即使用 Http 協(xié)議,也可以自己在業(yè)務(wù)層參數(shù)中定義簽名信息,實(shí)現(xiàn)自己的簽名算法保障數(shù)據(jù)的完整性。

signature = MD5(privateKey + MD5( 參數(shù)1 + 參數(shù)2 + 參數(shù)2 +...))

簽名算法有很多種,系統(tǒng)的簽名算法是機(jī)密性的信息,不能對(duì)外透漏。例如上面的算法中,將請(qǐng)求的所有參數(shù)依次相加然后做 MD5 運(yùn)算,取得的值再與約定的一個(gè)私密 key 再進(jìn)行一次 MD5,最后生成一個(gè)簽名 signature。這個(gè)算法客戶端和服務(wù)端都是知道的,所以服務(wù)端接收到請(qǐng)求后,就拿著獲取到的參數(shù)做執(zhí)行一遍通用的算法,然后將生成的簽名與客戶端傳過(guò)來(lái)的簽名做比較,相同的話就證明請(qǐng)求數(shù)據(jù)沒(méi)有被人改動(dòng)過(guò)。

但是這邊有個(gè)問(wèn)題,瀏覽器上面的 Js 代碼能容易被查看到,即使加密也很容易破解,我們的算法和私鑰都很容易泄漏。如果是安卓或者IOS程序,亦或是2個(gè)后臺(tái)服務(wù)的通信,這種情況算法用戶是看不到,但是軟件開(kāi)發(fā)是一個(gè)團(tuán)隊(duì)協(xié)作的工作,一般負(fù)責(zé)的開(kāi)發(fā)人員都知道,可靠性就沒(méi)辦法太高。相比,Https 的簽名算法是公開(kāi)的,他生成的簽名算法還會(huì)用公鑰去加密。同樣,如果 Http 也要整這么麻煩也是可以的,只是需要在自己的業(yè)務(wù)邏輯中去實(shí)現(xiàn),而 Https 借助的是安全套接字層,對(duì)應(yīng)用層完全透明,我們的應(yīng)用不需要多做什么就可以實(shí)現(xiàn)可靠性傳輸了。

2. HTTPS

Https 是一種通過(guò)計(jì)算機(jī)網(wǎng)絡(luò)進(jìn)行安全通信的傳輸協(xié)議,經(jīng)由 Http 進(jìn)行通信,利用 SSL/TLS 建立安全信道,加密數(shù)據(jù)包。Https 使用的主要目的是提供對(duì)網(wǎng)站服務(wù)器的身份認(rèn)證,同時(shí)保護(hù)交換數(shù)據(jù)的隱私與完整性。Http 服務(wù)的默認(rèn)端口是 80,Https 服務(wù)的默認(rèn)端口是 443。

HTTP + SSL = HTTPS = HTTP + 身份認(rèn)證 + 數(shù)據(jù)私密 + 數(shù)據(jù)完整性

2.1 SSL

Https 并不是新的一種協(xié)議,它是 Http 協(xié)議的基礎(chǔ)上面封裝了一層 SSL(Secure Socket Layer),Https 底層跟 Http 一樣是經(jīng)由 TCP 通信的。

SSL

SSL 并不是 Http 特有的,所有應(yīng)用層協(xié)議都可以使用 SSL 進(jìn)行安全通信。

2.2 加密算法

對(duì)稱加密算法

加密和解密的秘鑰使用的是同一個(gè)

優(yōu)點(diǎn)
加密速度快,計(jì)算量小。
缺點(diǎn)
通信前雙方需要協(xié)商好密鑰,密鑰在網(wǎng)絡(luò)中傳輸不安全。

非對(duì)稱加密算法

公開(kāi)密鑰與私有密鑰是一對(duì),如果用公開(kāi)密鑰對(duì)數(shù)據(jù)進(jìn)行加密,只有用對(duì)應(yīng)的私有密鑰才能解密;如果用私有密鑰對(duì)數(shù)據(jù)進(jìn)行加密,那么只有用對(duì)應(yīng)的公開(kāi)密鑰才能解密。
優(yōu)點(diǎn):私鑰不對(duì)外公開(kāi),公鑰可以提前告知對(duì)方,密鑰不需要在協(xié)商中傳輸,安全性高。
缺點(diǎn):加密算法復(fù)雜,效率低。

Https 混合加密算法

Https 結(jié)合了上面兩種加密算法的優(yōu)點(diǎn),前期通過(guò)非對(duì)稱加密協(xié)商好對(duì)稱加密所需的密鑰(保障了密鑰的安全性),后面通信的時(shí)候就拿著這個(gè)密鑰采用對(duì)稱加密進(jìn)行通信(保障了計(jì)算效率)。

3. 身份認(rèn)證

SSL 不僅提供加密處理,而且還使用了一種用于身份認(rèn)證的證書(shū)。證書(shū)是由第三方權(quán)威的認(rèn)證機(jī)構(gòu)頒發(fā)和維護(hù)。服務(wù)端和客戶端通過(guò)證書(shū)可以證明自己的身份。證書(shū)跟域名一樣是需要購(gòu)買的,因?yàn)闄C(jī)構(gòu)不僅僅要頒發(fā)證書(shū)給你,還要提供證書(shū)的認(rèn)證查詢服務(wù)。(有少部分免費(fèi)的存在)

大部分的 Web 網(wǎng)站都只要認(rèn)證服務(wù)端即可,當(dāng)我們?cè)L問(wèn) https:xxx 開(kāi)頭的網(wǎng)站,瀏覽器會(huì)去 CA 機(jī)構(gòu)校驗(yàn)對(duì)方的身份,不符合的就會(huì)彈出警告提示,開(kāi)發(fā)環(huán)境中經(jīng)常證書(shū)是自己生成的,所以瀏覽器經(jīng)常會(huì)提示警告,我們?nèi)绻麍?zhí)意通過(guò)繼續(xù)訪問(wèn)也是可以的。

少部分的場(chǎng)景需要客戶端和服務(wù)端雙向認(rèn)證,比如一些銀行的網(wǎng)站,我們需要事先插入一個(gè) U盾 之類的東西,往我們的瀏覽器客戶端安裝對(duì)應(yīng)的證書(shū)。

3.1 證書(shū)申請(qǐng)流程

證書(shū)的獲得可以通過(guò)購(gòu)買,也可以自己生成,當(dāng)然如果是購(gòu)買的需要提供域名,營(yíng)業(yè)執(zhí)照等信息。自己生成同樣需要這些信息,只是自己生成用的信息可以隨意輸入,瀏覽器檢查到信息不符時(shí)就是多個(gè)安全提醒,你依舊可以選擇直接訪問(wèn)。我們這邊不太多去講解 SSL 的證書(shū)細(xì)節(jié),避免因?yàn)榧?xì)節(jié)的困惑而迷失全局。

自簽名證書(shū)可以借助 SSL 密碼工具 OpenSSL 來(lái)生成。

生成 RSA 私鑰和自簽名證書(shū)

openssl req -newkey rsa:2048 -nodes -keyout rsa_private.key -x509 -days 365 -out cert.crt

req 是證書(shū)請(qǐng)求的子命令,-newkey rsa:2048 -keyout private_key.pem 表示生成私鑰(PKCS8格式),-nodes 表示私鑰不加密,若不帶參數(shù)將提示輸入密碼;
-x509表示輸出證書(shū),-days365 為有效期,此后根據(jù)提示輸入證書(shū)擁有者信息;

使用 已有RSA 私鑰生成自簽名證書(shū)

openssl req -new -x509 -days 365 -key rsa_private.key -out cert.crt

-new 指生成證書(shū)請(qǐng)求,加上-x509 表示直接輸出證書(shū),-key 指定私鑰文件,其余選項(xiàng)與上述命令相同

3.2 服務(wù)端認(rèn)證

服務(wù)端認(rèn)證
12306 的網(wǎng)站就是一個(gè)服務(wù)端認(rèn)證的應(yīng)用,大致的認(rèn)證流程如下:

  1. 瀏覽器向服務(wù)器發(fā)請(qǐng)求 https://www.12306.cn/index
  2. 服務(wù)器將證書(shū)和申請(qǐng)證書(shū)流程中生成的一對(duì)秘鑰中的公鑰發(fā)給瀏覽器
  3. 瀏覽器收到 證書(shū) 文件進(jìn)行分析,然后驗(yàn)證簽名。
  4. 簽名驗(yàn)證成功接下來(lái)瀏覽器校驗(yàn)證書(shū)申請(qǐng)者的身份。
  5. 一旦服務(wù)器校驗(yàn)成功,接下來(lái)就是進(jìn)行秘鑰協(xié)商,用非對(duì)稱方法協(xié)商出對(duì)稱加密所需的私鑰,然后用對(duì)稱算法加密通信。

3.3 客戶端認(rèn)證

SSL 客戶端認(rèn)證不會(huì)僅依靠證書(shū)完成認(rèn)證,一般會(huì) 和基于表單認(rèn)證組合形成一種雙因素認(rèn)證(Two-factor authentication)來(lái)使用。所謂雙因素認(rèn)證就是指,認(rèn)證過(guò)程中不僅需要 密碼這一個(gè)因素,還需要申請(qǐng)認(rèn)證者提供其他持有信息,從而作為另一 個(gè)因素,與其組合使用的認(rèn)證方式。比如網(wǎng)銀插入U(xiǎn)SB網(wǎng)盾后還需要輸入密碼。大概了解下就好,不深入了。

4. 小結(jié)

Http 直接跟 TCP 傳輸層交互,而 Https 多了一層 SSL 協(xié)議,正式這個(gè)協(xié)議讓 Https 有了數(shù)據(jù)加密、身份認(rèn)證的證書(shū)和數(shù)據(jù)完整性保護(hù)這些功能。SSL 是獨(dú)立于 HTTP 的協(xié)議,所以不光是 HTTP 協(xié)議,其他運(yùn)行在應(yīng)用層的 SMTP 和 Telnet 等協(xié)議均可配合 SSL 協(xié)議使用??梢哉f(shuō) SSL 是當(dāng)今世界上應(yīng)用最為廣泛的網(wǎng)絡(luò)安全術(shù)。