成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

HTTPS 是如何運作的?它解決了什么問題?

安全 應用安全
全稱為 Certificate Authority,它是一個機構,可以將其理解為客戶端和服務器都可以信賴的一個第三方。開發人員會將服務器的真實公鑰提供給 CA,然后 CA 判斷服務器的身份之后,會對公鑰簽名,然后將其和 CA 證書綁定在一起。當然 CA 證書包含的不僅僅只有簽名,還有序列號、用途、頒發者、有效時間之類的。

首先,HTTPS 并不是一個新的協議,而是 HTTP + SSL/TLS,即 SSL(Security  Socket Layer)和 TLS(Transport Layer Security) 的縮寫。但其實作為 SSL 的繼任者,TLS 已經完全替代了 SSL,只是大概還是習慣使用 SSL 這個名詞。為了嚴謹,后續都會繼續使用 TLS。

簡單了解 HTTP

從何而來

要了解 HTTPS,自然我們要先了解 HTTP 協議,最初 HTTP 協議的出現是為了讓全球的研究者知識共享而發明出來的,它于 1990 年被發明出來,但這一版本的 HTTP 協議并沒有作為標準。

HTTP/0.9

Tim Berners-Lee 和他的團隊提出這個最早的 HTTP/0.9 版本存在一些不明確的地方,例如:

  • 沒有版本標識,不像現在我們有 HTTP/0.9、HTTP/1.0、HTTP/1.1 等等,就連這個 0.9 都是后面才加上的
  • 沒有請求頭,只有一個簡簡單單普普通通的 GET 請求
  • 響應只支持 HTML 文檔本身,不支持其他的格式,比如圖片、視頻
  • 沒有狀態碼,根本不知道請求是否成功,或者是因為什么原因失敗
  • 短連接,也是就是后面 HTTP/1.1 和部分的 HTTP/1.0 提出 Keep-Alive 要解決的問題

這就是最初的 HTTP,存在很多的缺陷,也難怪沒有成為標準。

HTTP/1.0

到了1996年5月,HTTP 提出了新的版本 HTTP/1.0,而它也成了 HTTP 第一個正式的版本,也被正式的標準化。它解決了 HTTP/0.9 沒有解決的問題,例如:

  • 引入了明確的版本號
  • 定義了請求頭、響應頭,這讓請求中能夠附件傳輸很多的元數據,這些頭都是基礎,不再贅述
  • 支持了多種數據類型,例如圖片、音頻、視頻
  • 引入了狀態碼
  • 引入了緩存機制

我們現在之后后續的主流版本其實是 HTTP/1.1,這說明當時提出的 HTTP/1.0 其實還是存在部分的問題。

HTTP/1.1

1997年1月,HTTP/1.1 發布,這也是在 HTTP/2.0 出來之前最為主流的版本,我們來看看它解決了什么問題就知道 HTTP/1.0 存在的缺陷了。

  • 引入了持久化連接機制
  • 基于 Keep-Alive 長連接,推出了管線化技術,提高了發送請求的速度
  • 引入了更加靈活的緩存機制
  • 分塊傳輸
  • 范圍請求

所謂持久化連接機制,即服用底層的 TCP 連接。HTTP 底層通信使用的是 TCP,在 HTTP/1.1 之前都是發起一個 HTTP 請求就會建立一個 TCP 連接,傳輸數據之后再斷開。這波操作在 HTTP/1.0 那個時間是沒問題的,HTTP 沒普及,傳輸的內容也都是小容量的文本。但隨著 HTTP 的普及,傳輸的內容變得也越來越來豐富,況且還新增了圖片、音視頻。像這樣頻繁的發起、斷開 TCP 連接會大大的增加頁面資源的加載速度,降低用戶的體驗。所謂持久化連接也就是,只要任意一方沒有提出斷開 TCP 連接,就繼續復用這個連接,減少了創建連接帶來的開銷。

而管線化技術則是發送一個請求不用等待其響應,繼續發送下一個請求。沒有管線化技術時,必須等待上一個請求響應回來之后才能發送下一個請求,而這種機制在網絡較慢的情況下會引發一個問題——隊頭阻塞。比如,請求一張較大的圖片,偏偏網絡還慢,那么后續的請求都會被阻塞。但管線化技術解決了這個問題嗎?解決了一部分,沒有完全解決。采用管線化技術,請求雖然發出去了,但它是有序的, 所以在等待響應時,這一批里有響應遲遲沒有回來,后續的請求仍然要等待。所以這個問題并沒有完全解決。

HTTP/2.0

既然有問題,那么后續就需要有新的版本來解決這些問題。2015年5月,HTTP/2.0 正式標準化,之后慢慢開始大面積的普及,那么它又解決了哪些問題呢?主要如下:

  • 提出了多路復用,解決了 HTTP/1.1 中的隊頭阻塞問題
  • 使用了二進制協議,而不是原來的文本協議
  • 對頭部進行壓縮,減少每個 HTTP 請求的頭部大小,減少了傳輸的數據大小
  • 支持服務器推送,HTTP/2.0 允許服務器主動推送資源到客戶端,減少客戶端的請求次數

當然,相信你也知道,現在 HTTP/3.0 也出來了,其關鍵的改動在于將底層傳輸層的協議從 TCP 切換到了 QUIC,其底層采用的是 UDP,這個后面有機會單獨寫一篇文章來介紹。

Why HTTPS?

HTTP 即使推出了很多個版本,但是仍然存在問題,例如:

  • 協議本身沒有加密,再加上底層使用的 TCP/IP 本身就在很多環節容易被竊聽,例如我們熟悉的 Wireshark
  • 沒有驗證通信方的身份,可能遭遇偽裝
  • 無法校驗數據是否被篡改

混合加密

所以這才有了 HTTPS,也就是 HTTP + TLS。

在 HTTP 協議中,由它本身直接和 HTTP 通信,而在 HTTPS 協議中,HTTP 是和 TLS 進行通信,相當于給套了一層娃,加了個中間層。

那要如何進行加密呢?

HTTPS 采用了混合加密的方式,大致的流程如下:

  • 客戶端訪問服務器,服務器會返回自己的公鑰
  • 客戶端生成一個隨機密鑰,使用上一步獲取的公鑰對隨機密鑰進行加密
  • 將用服務器公鑰加密后的客戶端隨機密鑰發送給服務器
  • 服務器用自己的私鑰進行解密,拿到客戶端的隨機密鑰明文

圖片

到這里,客戶端和瀏覽器就將后續通信加解密要使用到的密鑰安全的進行了傳輸,后續客戶端服務器的所有通信都會使用這個隨機密鑰。所謂的混合加密就是即使用了對稱加密,也使用了非對稱加密。

中間人攻擊

但是這個步驟有個比較明顯的問題,即——中間人攻擊。

還是基于上面的這個步驟,客戶端以為自己在和服務器通信,實際上它在和中間人通信,然后中間人將服務器的真正公鑰  S 保存了下來,然后把中間人自己的公鑰 B 返回給了客戶端。

客戶端拿到了中間人的公鑰 B,然后使用公鑰 B 對其生成的隨機密鑰進行加密,然后傳給中間人。中間人拿到了加密密文,使用自己的私鑰 B’ 進行解密,到這里就拿到了客戶端的隨機密鑰。然后再用保存好的服務器真正公鑰 S 加密,將密文再傳給服務器。其流程如下圖所示:

圖片

中間人攻擊示意圖

這樣就完成了一波套娃,并且客戶端和服務器都沒有感知。這樣一來,一旦攻擊成功,后續的通信中間人都能夠通過前面步驟拿到的隨機密鑰進行解密,然后篡改,再加密傳給服務器。

那該如何解決這個問題呢?

在上面的流程中,其關鍵的問題在于客戶端無法證明服務器返回的公鑰的正確性,它可能是中間人的公鑰,而不是服務器的。如果有某種方式能夠讓我們確認,這個公鑰的的確確就是服務器的真實公鑰,上面的問題就迎刃而解了。

而這就是 CA。

CA 證書

全稱為 Certificate Authority,它是一個機構,可以將其理解為客戶端和服務器都可以信賴的一個第三方。開發人員會將服務器的真實公鑰提供給 CA,然后 CA 判斷服務器的身份之后,會對公鑰簽名,然后將其和 CA 證書綁定在一起。當然 CA 證書包含的不僅僅只有簽名,還有序列號、用途、頒發者、有效時間之類的。

然后客戶端來請求公鑰時,服務器會直接把證書返回給客戶端。那么問題又來了,你怎么能夠保證返回的證書不是由中間人返回的?加了個 CA 就能夠解決這個問題嗎?

當然不是。

客戶端還會對 CA 證書進行校驗,以此來保證:

  • CA 機構值得信賴
  • 服務器的公鑰真實有效

否則仍然會面臨中間人攻擊的風險。那客戶端是如何驗證這兩點的呢?

首先,在將服務器公鑰提供給 CA 時,CA 會使用自己的私鑰對服務器公鑰進行簽名。注意,這里是私鑰,不是公鑰。然后客戶端拿到這個證書之后,會使用 CA 的公鑰(內置在瀏覽器中)對其進行解密,然后拿到 CA 側登記證書時計算的 Hash 值,然后客戶端會根據證書上的信息,使用同樣的算法計算出另一個 Hash 值,然后將這兩個 Hash 值對比,就能夠知道證書是否可信賴。當然,這個只是其中的一個步驟,CA 的認證還涉及到信任鏈的問題,這里不展開。

當然,CA 也不能解決全部的問題。之前也出過 CA 機構被黑的事故,非法頒發了 Google 和 Twitter 的偽造證書。

HTTPS 握手過程

握手的過程,總結成了一張圖,其實就是將上面將的 HTTPS 的加密原理細化了一下:

圖片


責任編輯:武曉燕 來源: SH的全棧筆記
相關推薦

2024-12-09 09:30:00

適配器模式設計模式代碼

2020-11-02 13:25:45

Redis數據庫開源

2014-09-28 10:28:59

Docker云計算

2011-11-30 15:28:32

在線協作系統

2023-11-08 14:03:47

數據可視化數字化轉型

2020-06-15 08:06:25

ES數據

2021-03-23 18:32:46

JavaScript編程開發

2024-11-04 10:28:08

2024-10-15 09:25:08

JDBCMybatis數據庫

2019-04-26 13:01:16

ServiceMesh微服務架構

2024-11-05 08:16:04

HTTP/3HTTP 2.0QUIC

2012-07-30 09:49:44

云計算

2024-04-08 14:29:45

AI工廠數據中心

2022-04-04 07:51:32

Web框架

2025-01-10 09:13:36

2021-12-15 23:42:56

Webpack原理實踐

2020-11-06 17:04:17

強化學習機器學習人工智能

2021-07-13 07:52:03

ReactHooks組件

2021-07-16 06:56:50

邊緣計算分布式

2025-06-16 03:22:00

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 欧美大片在线观看 | 视频一区二区三区在线观看 | 亚洲一区二区欧美 | 亚洲激情av | 国内精品成人 | 欧美精品久久久 | 久久久久久色 | 午夜av电影 | 国产美女一区二区 | 三级在线免费 | 黄色网址免费在线观看 | 在线看av的网址 | jizz亚洲人 | 国产精品一区二区在线免费观看 | 男人天堂久久 | 91在线免费视频 | 成人免费视频网站在线观看 | 国产亚洲成av人在线观看导航 | 91视频进入 | 久久久精品久 | 国产玖玖 | 在线日韩| 国产成人在线视频 | 久久高清 | 午夜小电影 | 国产精品国产三级国产aⅴ无密码 | 日韩av中文 | xx视频在线| ririsao久久精品一区 | 欧美区在线 | 日本精品在线观看 | 久久成人精品视频 | www.99re| 伊人国产精品 | 亚洲一区二区中文字幕 | 日本粉嫩一区二区三区视频 | 在线欧美视频 | 精品一区二区三区视频在线观看 | 精品久久香蕉国产线看观看亚洲 | 天天干成人网 | 成人欧美一区二区三区黑人孕妇 |