HTTP 和HTTPS 都是應用層的協議之一,也是一般人使用網路時最常用的協議,當我們在瀏覽網站內容時,不管是網站上的文字、圖片、影片,或是上傳/下載檔案等操作,都是透過HTTP/HTTPS 進行資料的傳輸,它們的協議內容規範了客戶端請求和伺服器回應的標準。
HTTP (Hyper Text Transfer Protocol,超文本傳輸協議),用於客戶端與伺服器之間通訊的協議,定義了多種類型的請求和回應,通訊時透過定義好的類型進行溝通,相當於一種國際語言。
HTTP 是基於客戶端-伺服器模型運作,客戶端通常是瀏覽器,也有可能是網路爬蟲或其他工具;伺服器則是儲存和提供資源的主機,客戶端發送HTTP 請求至伺服器的指定埠(預設是80埠),伺服器接收到請求便會開始處理,處理完畢後回傳HTTP 回應。
HTTP 通訊是採一問一答的方式,也就是一個請求(Request)一個回應(Response),請求時包含所需的資料訊息,如URL、請求方法、表頭訊息等;回應時也包含請求所需的資料訊息,如網頁內容、狀態碼、表頭訊息等。
HTTP 是屬於無狀態協議,每次的請求-回應都是獨立的,伺服器不會保留本次請求以前的訊息,這樣可以使HTTP 訊息輕量化。
但有需要的時候也會透過會話管理技術,如Cookie、Session,來維護狀態訊息。
請求(Request)內容除了客戶端要傳送給伺服器的資料外,還有一些必要參數,如HTTP 方法、URL、協議版本、請求表頭等。
HTTP 方法
HTTP 方法(HTTP Method)是協議中,定義了該次請求伺服器應當執行的操作,如GET 是查詢資料、POST 是新增資料等,常用的HTTP 方法如下:
請求表頭
請求表頭(Request Headers)是每次發送HTTP 請求都會附加在資料上,內容包含與請求有關的資訊,常用的欄位如下:
如果想要知道更多請求表頭資訊可以看維基百科。
狀態碼
HTTP 狀態碼(HTTP Status Code)會在每個HTTP 回應的第一行,由3位數字組成的狀態碼,代表伺服器對請求處理的結果,以第一碼進行分類回應類型:
回應表頭
回應表頭(Response Headers)是伺服器處理完HTTP 請求後,回傳伺服器的訊息、回應的日期時間、內容類型等,以下是一些常用的欄位:
如果想要知道更多請求表頭資訊可以看維基百科。
回應主體
回應主體(Response Body)是伺服器處理完請求內容後,實際要回傳給客戶端處理或顯示的資料,主體內容是HTML、JSON、XML、圖片、影片等。
主體的類型是由回應表頭中的Content-Type 指定,客戶端會依據Content-Type 內容進行解析和處理。
HTTPS (Hyper Text Transfer Protocol Secure,超文本傳輸安全協議),它建立在HTTP 協議的基礎之上,再使用SSL/TLS 為HTTP 請求和回應提供資料加密、身份驗證及資料完整性驗證等機制,藉此提升了資料傳輸的安全性。
因為HTTPS 提供的功能是基於SSL/TLS 協議,也被稱為HTTP over SSL 或HTTP over TLS。
HTTPS 使用TLS 加密資料,保護資料在傳輸過程中即使被竊取也無法得知內容。
使用HTTPS 進行通訊時,會要求伺服器提供TLS 憑證來表明身份,客戶端收到憑證後會進行驗證,確保它是由可信的憑證頒發機構所簽發的,以防偽造伺服器。
加密過後的資料,使用MAC(Message Authentication Code,消息驗證碼)的技術來達成完整性驗證,可以保證數據在傳遞過程中沒有被篡改,避免中間人攻擊(Man-in-the-middle attack,MITM)。
SSL/TLS 和TCP/IP 類似,是SSL 和TLS 兩個協議的簡寫組合在一起,它們的用途都是在客戶端與伺服器之間提供資料加密及驗證機制的通訊協議,只是SSL 是TLS 的前身,推出TLS 是為了取代SSL 協議。
SSL (Secure Sockets Layer,安全通訊協議)於1995年首次發佈了SSL2.0,隔年又推出了SSL3.0,但其本身設計存在缺陷,因此目前已經被TLS 完全取代。
TLS (Transport Layer Security,傳輸層安全性協議),於1999年作為SSL3.0 的後續產品推出,是比SSL 更安全的版本。
TLS 交握
在網路用語中,交握是一種確認雙方身分的程序,TLS 交握程序中,會對雙方進行身分驗證,然後交換加密金鑰。
當傳輸層建立連線(TCP 三次握手),就輪到TLS 開始握手,過程中會確定以下資訊:
從上面我們可以知道,SSL 和TLS 的用途非常類似,但它們的運作方式並不同。
交握方式
加密套件
加密套件是一組演算法的集合,可建立金鑰來加密客戶端與伺服器之間的資訊。
通常加密套件包含金鑰交換演算法、驗證演算法和MAC 演算法,基於安全性考量,TLS 加密演算法的版本較SSL 新。
訊息身分驗證
SSL 和TLS 均使用MAC 技術來達成資料完整性驗證,只是SSL 協議使用的是MD5 演算法(已棄用)產生MAC,而TLS 使用HMAC(雜湊訊息驗證碼)來實現更複雜的密碼編譯和安全性。
提醒訊息
提醒訊息是SSL/TLS 協議用來傳送錯誤和警告的方式,SSL 提醒訊息只有兩種,「警告」和「嚴重」,警告提醒表示發生錯誤但連線可以繼續,嚴重提醒表示必須立即中止連線,而TLS 有另外的提醒訊息,稱為「關閉通知」,關閉通知提醒指示工作階段結束。
另外,SSL 提醒訊息不加密,而TLS 提醒會加密。
目前已將TLS 作為產業標準,SSL 已被完全棄用,所有的SSL 憑證自然也不被採用,但網路術語仍常用SSL(憑證)表示TLS(憑證),即使有個憑證自稱是SSL 憑證,它也會支援TLS 協議。
而憑證就是為了確保網路通訊的安全性,其提供身分驗證的數字憑證包含以下資訊:
HTTPS 是什麼?一文搞懂和 HTTP 有什麼差別 - ALPHA Camp
SSL 與 TLS 的比較 – 通訊協定之間的差異 – AWS