1. 程式人生 > >HTTP入門(七):確保Web安全的HTTPS

HTTP入門(七):確保Web安全的HTTPS

7.1HTTP的缺點

  • 通訊使用明文(不加密),內容可能會被竊聽
  • 不驗證通訊方的身份,因此有可能遭遇偽裝
  • 無法證明報文的完整性,所以有可能已遭篡改

7.1.1 通訊使用明文可能會被竊聽

由於HTTP本身不具備加密的功能,所以也無法做到對通訊整體(使用HTTP協議通訊請求和響應的內容)進行加密。即,HTTP報文使用明文(指未加密的報文)進行加密

  • TCP/IP是可能被竊聽的網路

按照TCP/IP協議族的工作機制,通訊內容在所有的通訊線路上都有可能遭到窺視。即使是已經加密處理的通訊,也會被窺視到通訊內容,這點和未加密的通訊是相同的。只是說如果經過加密,就有可能讓人無法破解報文資訊的含義,但加密處理後的報文資訊本身還是會被看到的。

  • 加密處理防止被竊聽

防竊聽保護資訊的幾種對策中,最為普及的就是加密技術。

通訊的加密

和SSL(Secure Socket Layer,安全套接層)或者TLS(Transport Layer Security,安全傳輸層協議)的組合使用,加密HTTP的通訊內容。

用SSL建立安全通訊線路之後,就可以在這條路上進行HTTP通訊了。與SSL組合使用的HTTP被稱為HTTPS(HTTP Secure ,超文字傳輸安全協議)。

7.1.2 不驗證通訊方的身份就可能遭遇偽裝

HTTP協議中請求和響應不會對通訊方進行確認。也就是說存在“伺服器是否就是傳送請求中URI真正指定的主機,返回的響應是否真的返回到實際提出請求的客戶端”。

任何人都可發起請求

在HTTP協議通訊時,由於不存在確認通訊方的處理步驟,任何人都可以發起請求,另外,伺服器只要接收到請求,不管對方是誰都會返回一個響應(但也限於傳送端的IP地址和埠號沒有被Web伺服器設定限制訪問的前提下)

查明對手的證書

SSL不僅可以加密,還使用了一種被稱為證書的手段,可用於確定方。

證書由值得信賴的第三方機構頒發,用以證明伺服器和客戶端是實際存在的。偽造證書是異常困難的,所以只要能夠確認通訊方持有的證書,即可判斷通訊方的真實身份。

Snipaste_2018-10-12_22-58-39.png

7.1.3無法驗證報文的完整性,可能已遭篡改

所謂完整性是指資訊的準確性。若無法證明其完整性,也就意味著無法證明其資訊是否準確。

接受到的內容可能有誤

沒有辦法確認,發出的請求/響應和接受到的請求/響應是前後相同的。

請求或響應在傳播途中,遭遇攻擊者攔截並篡改內容的攻擊稱為中間人攻擊(Man-in-the-Middle attack,MITM)

7.2 HTTP+加密+認證+完整性保護=HTTPS

經常在Web的登入頁面和購物結算介面等使用HTTPS通訊。

7.2.1HTTPS是身披SSL外殼的HTTP

HTTPS並非是應用層的一種新協議。只是HTTP通訊介面部分用SSL協議代替而已。

通常,HTTP直接和TCP通訊。當使用SSL時,則演變成先和SSL通訊,再由SSL和TCP通訊了。簡言之,所謂HTTPS,其實就是身披SSL外殼的HTTP。

在採用SSL後,HTTP就擁有了HTTPS的加密、證書和完整保護這些功能。

SSL是獨立於HTTP的協議,所以不光是HTTP協議,其他執行在應用層SMTP和Telnet等協議均可配合SSL協議使用。

7.2.2相互交換金鑰的公開金鑰加密技術

SSL採用一種叫做公開金鑰加密的加密處理方式。

共享金鑰加密的困境

加密和解密同用一個金鑰的方式稱為共享金鑰加密,也被稱為對稱金鑰加密。

問題在於:

  • 已共享金鑰的方式進行加密,金鑰如何安全地轉交給對方。
  • 如何安全地保管接受到的金鑰、

使用兩把金鑰的公開金鑰加密

公開金鑰加密使用一對非對稱的金鑰。一把叫做私有金鑰,另一把叫做公開金鑰。顧名思義,私有金鑰不能讓其他任何人知道,而公開金鑰則是可以隨意釋出,任何人都可以獲得。

HTTPS採用混合加密機制

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

在交換金鑰環節使用公開金鑰加密,之後建立通訊交換報文階段則使用共享金鑰加密方式。

Snipaste_2018-10-13_14-01-36.png

7.2.3HTTPS的安全通訊機制

HTTPS使用SSL(Secure Socket Layer)和TLS(Transport Layer Security)這兩個協議,TSL是以SSL為原型開發的協議,有時候統一稱該協議為SSL。

SSL速度

Snipaste_2018-10-13_14-18-54.png

SSL慢分為兩種,一種是指通訊慢,二是指由於大量消耗CPU及記憶體等資源,導致處理速度變慢。

為什麼不一直使用HTTPS?

  • 與純文字通訊相比,加密通訊會消耗更多的CPU及記憶體資源,特別是每當那些訪問量較多的Web網站進行加密處理時候,他們所承擔的負載不容小覷。因此,如果是非敏感資訊,則使用HTTP通訊,只有包含個人資訊等敏感資訊時,才利用HTTPS進行通訊。
  • 節約購買數字證書的費用。