HTTP基礎知識(七)

2022-07-24 07:42:11 字數 3344 閱讀 4910

http基礎知識(七)

七、確保web安全的https

1、http的缺點

(1)通訊使用明文(不加密),內容可能會被竊聽

因為按tcp/ip協議族的工作機制,通訊內容在所有的通訊線路上都有可能遭受到窺視。即使已經過加密處理的通訊,也會被窺視到通訊內容,這點和未加密的通訊時相同的。(使用抓包工具就可以獲取http協議的請求和響應的內容,並對其進行解析)

加密的方式:

1)通訊的加密

http協議可通過和ssl(secure socket layer,安全套接層)或tls(transport layer security,安全層傳輸協議)的組合使用,加密http的通訊內容。

與ssl組合使用的http被稱為https(http secure,超文字傳輸安全協議)或http over ssl

2)內容的加密

即把http報文裡所含的內容盡心加密處理。為了做到有效的內容加密,而且要求客戶端和伺服器同時具備加密和解密機制。

(2)不驗證通訊方的身份,因此有可能遭遇偽裝

在http協議通訊時,由於不存在確認通訊方的處理步驟,任何人都可以發起請求。

隱患:1)無法確定請求傳送至目標的web伺服器是否按真實意圖返回的那台伺服器。有可能是已偽裝的web伺服器。

2)無法確定響應返回到的客戶端是否是按真實意圖接收響應的那個客戶端。有可能是已偽裝的客戶端。

3)無法確定正在通訊的對方是否具備訪問許可權。因為某些伺服器上班儲存著重要的資訊,只想發給特定使用者通訊的許可權。

4)無法判定請求是來自何方、出自誰手

5)即使是無意義的請求也會照單全收。無法阻止海量請求下的dos攻擊(denial of service,拒絕服務攻擊)

措施:查明對方的證書

使用ssl可以確定通訊方,不僅提供加密處理,而且還使用了一種被稱為證書的手段,可用於確定方。

證書由值得信任的第三方機構頒發,用以證明伺服器和客戶端是實際存在的。

客戶端持有證書即可完成個人身份的確認,也可用於對web**的認證環節。

(3)無法證明報文的完整性,所以有可能已遭篡改

由於http協議無法證明通訊的報文完整性,因此,在請求或響應送出之後直到對方接收之前的這段時間內,即使請求或響應的內容遭到篡改,也沒有辦法獲悉。(沒有辦法確認發出的請求/響應和接收到的請求/響應是前後相同的。)

請求或響應在傳輸途中,遭攻擊者攔截並篡改內容的攻擊成為中間人攻擊(man-in-the-middle attack,mitm)

措施:常用的是md5和sha-1等雜湊值校驗的方法,以及用來確認檔案的數字簽名方法。

但是pgp和md5本身唄改寫的話,使用者是沒有辦法意識到的。

2、http+加密+認證+完整性保護=https

使用https通訊時,改用https://,是身披ssl外殼的http。使用ssl時,http先和ssl通訊,再由ssl和tcp通訊。

ssl是獨立於http的協議,許多執行在應用層的協議均可配合ssl協議使用,ssl是當今世界上應用最為廣泛的網路安全技術。

(1)相互交換金鑰的公開金鑰加密技術

ssl採用一種叫公開金鑰加密(public-key crytography)的加密處理方式。即加密和解密都會用到金鑰,沒有金鑰就無法對密碼解密。

加密和解密同用乙個金鑰的方式稱為共享金鑰,也叫對稱金鑰加密。但是這種共享金鑰的方式必須將金鑰發給對方,如果通訊被監聽就可能會落入攻擊者之手,失去了加密的意義。

公開金鑰方式很好地解決了共享金鑰加密的困難。它使用一對非對稱的金鑰,一把是私有金鑰,另一把是公開金鑰。公開金鑰加密,私有金鑰解密,過程中無需傳送私有金鑰,不會被盜走。

https採用共享金鑰加密和公開金鑰加密兩者並用的混合加密機制。

(2)證明公開金鑰正確性的證書

公開金鑰加密方式無法證明本身是貨真價實的公開金鑰。未解決此問題,可用由數字證書認證機構(ca,certificate authority)和其相關機關頒發的公開金鑰證書。

數字證書認證機構的業務流程:

1)伺服器運營人員向機構提出公開金鑰的申請;

2)機構判明提出申請者的身份;

3)機構對申請的公開金鑰做數字簽名,將該公開金鑰放入公鑰證書後繫結在一起

證書的乙個作用是用來證明作為通訊一方的伺服器是否規範,另外乙個作用是可確認對方伺服器背後運營 的企業是否真實存在。擁有該特性的證書就是ev ssl證書

(3)https的安全通訊機制

https的通訊步驟:

1)客戶端通過傳送client hello報文開始ssl通訊。報文中包含客戶端支援的ssl的指定版本、加密元件列表(所使用的加密演算法及金鑰長度等)

2)伺服器可進行ssl通訊時,會以server hello報文作為應答。和客戶端一樣,在報文中包含ssl版本以及加密元件。伺服器的加密元件內容是從接收到的客戶端加密元件內篩選出來的。

3)之後伺服器傳送certificate報文。報文中包含公開金鑰證書。

4)最後伺服器傳送server hello done報文通知客戶端,最初階段的ssl握手協商部分結束。

5)ssl第一次握手結束後,客戶端client key exchange報文作為回應。報文中包含通訊加密中使用的一種被稱為pre-master secret 的隨機密碼串。該報文已用步驟3中的公開金鑰進行加密。

6)接著客戶端繼續傳送change cipher spec報文。該報文會提示伺服器,在此報文之後的通訊會採用pre-master secret金鑰加密。

7)客戶端傳送finished報文。該報文包含連線至今全部報文的整體檢驗值。這次握手協商是否能夠成功,要以伺服器是否能夠正確解密該報文作為判定標準。

8)伺服器同樣傳送change cipher spec報文。

9)伺服器同樣傳送finished報文。

10)伺服器和客戶端的finished報文交換完畢之後,ssl連線就算建立完成。當然,通訊會受到ssl的保護。從此處開始進行應用層協議的通訊,即傳送http請求。

11)應用層協議通訊,即傳送http響應。

12)最後由客戶頓斷開連線。斷開連線時,傳送close_notify報文。這步之後再傳送tcp fin報文來關閉與tcp的通訊。

應用層傳送資料時附加一種叫做mac(message authentication code)的報文摘要。能夠差值報文是否遭到篡改,從而保護報文的完整性。

但是當使用ssl時,處理速度會變慢。一是通訊慢,一是由於大量消耗cpu及記憶體等資源導致處理速度變慢。所以並不是所有的web**不一直使用https,訪問量大的**在進行加密處理時會承擔大量的負載。而且https所使用的證書必須向認證機構購買,這也是**需要考慮到的因素。

這裡蒐集了一些大神的貼子:

HTTP 基礎知識

具體去看原文 你應該知道的http基礎知識 1.http請求報文格式 http的請求報文分為三個部分請求行 請求頭和請求體。1.1 請求行 請求行 request line 分為三個部分 請求方法 請求位址和協議及版本,以crlf r n 結束。http 1.1定義的請求方法有8中 get post...

HTTP 基礎知識

標籤位於文件的頭部,不包含任何內容。標籤的屬性定義了與文件相關聯的名稱 值對。標籤永遠位於 head 元素內部。http equiv 屬性為名稱 值對提供了名稱。並指示伺服器在傳送實際的文件之前先在要傳送給瀏覽器的 mime 文件頭部包含名稱 值對。當伺服器向瀏覽器傳送文件時,會先傳送許多名稱 值對...

HTTP基礎知識

get 用於請求訪問已經被uri 統一資源識別符號 識別的資源,可以通過url傳參給伺服器 post 用於傳輸資訊給伺服器,主要功能與get方法類似,但一般推薦使用post方式。put 傳輸檔案,報文主體中包含檔案內容,儲存到對應uri位置。head 獲得報文首部,與get方法類似,只是不返回報文主...