iT邦幫忙

2024 iThome 鐵人賽

DAY 19
2
Software Development

從零開始的後端學習之旅系列 第 19

DAY19 HTTP 到 HTTPs 改變了什麼?只是多加了 1 個 S 嗎?

  • 分享至 

  • xImage
  •  

前言

前面提到了 HTTP 協定的版本歷史沿革及封包結構的內容組成,但在當今的網路環境中,為什麼許多網站的 URL 開頭是 HTTPS 而不是 HTTP ?這不僅僅是多了一個 S 而已,背後還隱含著更深層次的意義。HTTPS 的「S」代表「安全」(Secure),它透過加密技術來保護使用者與網站之間的資料傳輸,防止資料在過程中被竊聽或篡改。今天的文章就會介紹一下從 HTTP 到 HTTPS 的改變,那就開始吧~~

HTTPs 是什麼?

HTTPS(Hypertext Transfer Protocol Secure),前面有提過 S 代表的是安全,而其安全性則是透過 SSL(已經被棄用)以及現在使用的 TLS(基於SSL而來)等協定去實現,因此 HTTPS 又被稱為 『HTTP over SSL』或是『HTTP over TLS』。HTTP 的數據傳輸是透過明文傳輸的,但如今很多隱密資訊(如密碼、信用卡號等)會透過 HTTP 進行傳輸,對於隱私以及安全性沒有保障,於是透過 SSL 以及 TLS 對於數據進行加密的 HTTPS 便逐漸成為主流。

SSL 跟 TSL 是什麼?

  • SSL(Secure Sockets Layer,安全資料傳輸層),由 Netscape 於 1996 年發布 SSL 3.0,用於在伺服器和用戶端之間建立加密的網路鏈接,確保傳遞的所有資料都是私密且安全的。不過由於安全性不足,很快便於 1999 年發布的 TLS 1.0 所取代。

  • TLS(Transport Layer Security,傳輸層安全標準),最早的 1.0 版本在RFC 2246中被規範,主要的目的是在兩個通訊應用程式之間提供隱私和資料完整性。就像官方文件所述:

    This document and the TLS protocol itself are based on the SSL 3.0
    Protocol Specification as published by Netscape. The differences
    between this protocol and SSL 3.0 are not dramatic, but they are
    significant enough that TLS 1.0 and SSL 3.0 do not interoperate.

    TLS 是基於 SSL 3.0 的基礎所發展出來的加密協定,因此這個版本也被視為是 SSL 3.0的升級版,不過雖然他們的性質相似,基本上他們是無法互通的!

    而經過 TLS 進行的安全連線應該具有以下三種屬性:

  1. 身份驗證(Authentication):在傳輸數據時,伺服器端都必須被驗證,使得客戶端能夠確定所連線到的伺服器是正確的,而不是一些惡意的非法冒充者(ex. 網址名稱相似的冒牌網站)。經過身份驗證,可以確保使用者連線到的網站是可以信賴且安全的。而身份驗證的實現可以透過非對稱加密(ex. RSA)等方式。

  2. 保密(Confidentiality):對於使用者與伺服器之間傳輸的數據進行加密,確保傳送數據期間沒有其他人可以知道這些內容,是受到保護的。

  3. 完整性(Integrity):透過對傳輸的數據進行驗證,確保數據傳輸的完整性,以及在傳輸過程中不會被修改。

HTTPS 是如何應用 TLS?

在 2000 年所發布的RFC 2818中,規範了HTTPS 如何使用 TLS 以保護其資料傳輸的安全性。

  • HTTP 伺服器在接受到請求時,所預期收到的第一個訊息是前面文章所提到的 request line,告訴伺服器要執行什麼動作,目標是哪個資源,以及使用的協定版本,如下所示:

       GET /index.html HTTP/1.1
    

    而 HTTP/TLS 伺服器則是期待會先收到一個 TLS ClientHello 的訊息,這是 TLS 握手過程的開始,客戶端會提供其所支持的加密算法、TLS 版本以及其他參數,直到 TLS 握手過程結束後客戶端才會開始發送 HTTP 請求。
    而在握手過程中,客戶端首先發送 ClientHello 消息以開始 TLS 握手。伺服器回應ServerHello,並發送其數位證書(由CA所頒發)以供客戶端驗證。客戶端驗證伺服器的證書是否合法,如果不合法則會顯示警告。若伺服器要求客戶端提供證書(非強制),則客戶端也會進行相應的驗證。

  • 為了區別 HTTP 與 HTTPS,使用 HTTPS 進行連線時,預設的埠號為443,與 HTTP 預設的埠號80做區隔。

  • 在使用 HTTPS 時必須檢查伺服器的數位證書中的主機名,以防止中間人攻擊。同時也確保客戶端連接到正確的伺服器,而不是惡意的非法冒充者。

小結

今天簡單介紹了一下 HTTPS 與 HTTP 之間的不同,而現在的主流方式則是透過 TLS 來對於傳輸的數據進行加密,由於對 TLS 還沒有很詳盡的了解,所以只有小小介紹一下,如果之後有時間會再補充詳細內容~
在使用網路時,記得要看一下網頁是不是 https 開頭,以及開頭有如下小鎖頭,不然你們的資料可是很有機會被外流的唷!!
https://ithelp.ithome.com.tw/upload/images/20241003/20167721dCDNwOMJsz.png
/images/emoticon/emoticon29.gif

ps.如果想要自己的網站在 Google 搜尋的時候可見度比較高的話,就記得要使用 https 喔!因為在 Google 的 SEO 評分中,https 相對 http 網頁來說會比較高分唷~

參考資料

RFC 2246
RFC 2818
RFC 8446
MDN


上一篇
DAY18 狀態碼這麼多怎麼分?搞懂 HTTP 回應的5大類別!
下一篇
DAY20 揭開編碼的神秘面紗:為什麼它不是加密?
系列文
從零開始的後端學習之旅30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言