HTTPS 是如何保證傳輸安全的

2022-09-10 12:45:16 字數 3755 閱讀 3604

在談論 https 協議之前,先來回顧一下 http 協議的概念。

http 協議是一種基於文字的傳輸協議,它位於 osi 網路模型中的應用層

http 協議是通過客戶端和伺服器的請求應答來進行通訊,目前協議由之前的 rfc 2616 拆分成立六個單獨的協議說明(rfc 7230、rfc 7231、rfc 7232、rfc 7233、rfc 7234、rfc 7235),通訊報文如下:

2.被中間人進行攻擊,內容修改為我愛php

3.小明被群嘲(手動狗頭)

可以看到在 http 傳輸過程中,中間人能看到並且修改 http 通訊中所有的請求和響應內容,所以使用 http 是非常的不安全的。

雙方約定加密方式

2.使用 aes 加密報文

這樣看似中間人獲取不到明文資訊了,但其實在通訊過程中還是會以明文的方式暴露加密方式和秘鑰,如果第一次通訊被攔截到了,那麼秘鑰就會洩露給中間人,中間人仍然可以解密後續的通訊:

那麼對於這種情況,我們肯定就會考慮能不能將秘鑰進行加密不讓中間人看到呢?答案是有的,採用非對稱加密,我們可以通過 rsa 演算法來實現。

在約定加密方式的時候由伺服器生成一對公私鑰,伺服器將公鑰返回給客戶端,客戶端本地生成一串秘鑰(aes_key)用於對稱加密,並通過伺服器傳送的公鑰進行加密得到(aes_key_secret),之後返回給服務端,服務端通過私鑰將客戶端傳送的aes_key_secret進行解密得到aek_key,最後客戶端和伺服器通過aek_key進行報文的加密通訊,改造如下:

可以看到這種情況下中間人是竊取不到用於aes加密的秘鑰,所以對於後續的通訊是肯定無法進行解密了,那麼這樣做就是絕對安全了嗎?

所謂道高一尺魔高一丈,中間人為了對應這種加密方法又想出了乙個新的破解方案,既然拿不到aes_key,那我就把自己模擬成乙個客戶端和伺服器端的結合體,在使用者->中間人的過程中中間人模擬伺服器的行為,這樣可以拿到使用者請求的明文,在中間人->伺服器的過程中中間人模擬客戶端行為,這樣可以拿到伺服器響應的明文,以此來進行中間人攻擊:

這一次通訊再次被中間人截獲,中間人自己也偽造了一對公私鑰,並將公鑰傳送給使用者以此來竊取客戶端生成的aes_key,在拿到aes_key之後就能輕鬆的進行解密了。

中間人這樣為所欲為,就沒有辦法制裁下嗎,當然有啊,接下來我們看看 https 是怎麼解決通訊安全問題的。

https 其實是ssl+http的簡稱,當然現在ssl基本已經被tls取代了,不過接下來我們還是統一以ssl作為簡稱,ssl協議其實不止是應用在http協議上,還在應用在各種應用層協議上,例如:ftpwebsocket

其實ssl協議大致就和上一節非對稱加密的性質一樣,握手的過程中主要也是為了交換秘鑰,然後再通訊過程中使用對稱加密進行通訊,大概流程如下:

這裡我只是畫了個示意圖,其實真正的 ssl 握手會比這個複雜的多,但是性質還是差不多,而且我們這裡需要關注的重點在於 https 是如何防止中間人攻擊的。

通過上圖可以觀察到,伺服器是通過 ssl 證書來傳遞公鑰,客戶端會對 ssl 證書進行驗證,其中證書認證體系就是確保ssl安全的關鍵,接下來我們就來講解下ca 認證體系,看看它是如何防止中間人攻擊的。

在 ca 認證體系中,所有的證書都是由權威機構來頒發,而權威機構的 ca 證書都是已經在作業系統中內建的,我們把這些證書稱之為ca根證書

我們的應用伺服器如果想要使用 ssl 的話,需要通過權威認證機構來簽發ca證書,我們將伺服器生成的公鑰和站點相關資訊傳送給ca簽發機構,再由ca簽發機構通過伺服器傳送的相關資訊用ca簽發機構進行加簽,由此得到我們應用伺服器的證書,證書會對應的生成證書內容的簽名,並將該簽名使用ca簽發機構的私鑰進行加密得到證書指紋,並且與上級證書生成關係鏈。

那麼客戶端(瀏覽器)又是如何對伺服器證書做校驗的呢,首先會通過層級關係找到上級證書,通過上級證書裡的公鑰來對伺服器的證書指紋進行解密得到簽名(sign1),再通過簽名演算法算出伺服器證書的簽名(sign2),通過對比sign1sign2,如果相等就說明證書是沒有被篡改也不是偽造的。

這裡有趣的是,證書校驗用的 rsa 是通過私鑰加密證書簽名,公鑰解密來巧妙的驗證證書有效性。

這樣通過證書的認證體系,我們就可以避免了中間人竊取aes_key從而發起攔截和修改 http 通訊的報文。

首先先通過對 http 中間人攻擊的來了解到 http 為什麼是不安全的,然後再從安全攻防的技術演變一直到 https 的原理概括,希望能讓大家對 https 有個更深刻的了解。

HTTPS 是如何保證安全的?

每當我們討論到資訊保安的時候,我們最長接觸到的資訊加密傳輸的方式莫過於 https 了,當我們瀏覽器位址列閃現出綠色時,就代表著這個 支援 https 的加密資訊傳輸方式,並且你與它的連線確實被加密了。但是 https 並不是乙個單一的東西,它知識我們常見的 http 協議和某個加密協議的乙個混合,...

Https是如何保證安全的

https 全稱 hypertext transfer protocol over secure socket layer 是以安全為目標的http通道,簡單講是http的安全版。即http下加入ssl層,https的安全基礎是ssl,因此加密的詳細內容就需要ssl,簡單點也是https http ...

HTTPS 是如何保證安全的?

每當我們討論到資訊保安的時候,我們最長接觸到的資訊加密傳輸的方式莫過於 https 了,當我們瀏覽器位址列閃現出綠色時,就代表著這個 支援 https 的加密資訊傳輸方式,並且你與它的連線確實被加密了。但是 https 並不是乙個單一的東西,它知識我們常見的 http 協議和某個加密協議的乙個混合,...