簡單介紹 HTTPS

程式技術
sharkHead

超文本傳輸協定 (HyperText Transfer Protocol,簡寫 HTTP),是全球網際網路的基礎,在網際網路剛剛起步的年代,就是依據 HTTP 這個協定來傳輸來自世界各地的通訊。

從 2000 年後,HTTP 逐漸被 HTTPS  (HyperText Transfer Protocol Secure) 取代,主要原因就在於 HTTP 並不安全,如果遇到未使用 HTTPS 的網站,現今的瀏覽器甚至還會提出警告。

2021_07_14_19_40_09_60eecd19bed93.png
如果網站沒有使用 HTTPS,瀏覽器會貼心地告訴你

HTTP 最大的問題在於傳輸時是使用明文傳輸,意思就是你在網站輸入的任何敏感資訊,包含帳號密碼、信用卡資料…等,在傳輸過程中都是沒有加密的,只要攻擊者能攔截傳輸的訊息,就能輕鬆地獲取敏感資訊。

HTTPS 便是為了解決這個問題而存在的,HTTPS 是 HTTP 的擴展,因此 HTTPS 並非是獨立的通信協定,而是 HTTP 與 SSL/TLS 的結合,與 HTTP 差別在於多了一層加密。

對稱加密與非對稱加密

在介紹 HTTPS 的原理前,首先需要簡單理解一下何謂對稱加密非對稱加密

對稱加密

加密與解密使用同一組密鑰,這組密鑰可能會有兩個或多個成員間持有,以便維持通訊 (常見的對稱加密有 AES、3DES、DES)。

對稱加密有以下優缺點:

  • 優點:計算量小,因此加密速度與效率高,適合加密比較大的資料。
  • 缺點:若要通訊,就必須把密鑰傳給對方,這個過程很有可能導致密鑰被竊取,因此對稱加密並不能完全保證安全。

為了避免將對稱加密的密鑰在傳給對方的途中被竊取,便產生了非對稱加密。

非對稱加密

加密與解密會使用兩個完全不同的金鑰,一組公鑰與一組私鑰。公鑰可以公開,並用來加密。私鑰由自己持有,並用來解密。

簡單舉個例子,假設有 A 與 B,當 A 想把敏感資訊傳給 B 時,A 可以這麼做。

  1. A 先跟 B 拿取 B 的公鑰。
  2. A 用 B 的公鑰加密敏感資訊。
  3. A 將加密的敏感資訊傳給 B。
  4. B 用自己的私鑰解密 A 傳過來的加密敏感資訊。

可以這麼說,公鑰就像是保險箱,而私鑰是保險箱的鑰匙,當小王想傳東西給小明,小王可以跟小明拿他的保險箱,把東西放進保險箱後再還給小明,小明就可以用保險箱鑰匙打開保險箱並取得裡面的東西。

由於保險箱的鑰匙 (私鑰) 從頭到尾都沒有傳給別人,因此非對稱加密比對稱加密更為安全。但比較安全的代價,就是運算過程非常複雜,運算效率遠不及對稱加密

因此在實際狀況,非對稱加密只會用在加密對稱加密使用的密鑰,確保對稱加密的密鑰不會外洩,之後資訊的傳輸,都是使用對稱加密,確保效率。

當你訪問有 HTTPS 的網站

網站如果想要掛上 HTTPS,就必須要去跟憑證頒發機構 (Certificate Authority,簡稱 CA) 申請數位憑證,申請成功後就可以從 CA 那裡取得憑證與公私鑰。

私鑰由網站伺服器端保存,不可以外洩,公鑰則是附帶在憑證中,可以公開,憑證本身會附帶一個電子簽名,用來驗證憑證的完整性和真實性,防止憑證被篡改。

當用戶訪問一個 HTTPS 的網站,用戶端與伺服器端會做哪些事情呢?

  1. 用戶端訪問網站,請求被發送至網站伺服器端的 443 port (HTTPS 預設通訊埠號,HTTP 為 80 port)。
  2. 伺服器端接到用戶請求,將憑證傳送給用戶端。憑證除了公鑰,還有其他如 CA 相關資訊與憑證有效期限,瀏覽器會去判斷憑證是否正確、有無被竄改還有是否過期。
  3. 如果憑證沒有問題,用戶端就會隨機生一個由亂數組成的 Key (對稱密鑰) ,並用憑證中的公鑰加密此 Key。
  4. 用戶端將加密過後的 Key 傳送給伺服器端,作為之後通訊用的對稱密鑰。
  5. 伺服器端收到加密的 Key,用私鑰解密並取得 Key。避免對稱加密中密鑰可能洩漏的問題。
  6. 接下來用戶端與伺服器端就可以使用對稱加密開始進行資料傳輸。

參考資料

sharkHead
written by
sharkHead

後端打工仔,在下班後喜歡研究各種不同的技術。稍微擅長 PHP,並偶爾涉獵前端開發。個性就像動態語言般隨興,但渴望做事能像囉嗦的靜態語言那樣嚴謹。

0 則留言