簡單介紹 HTTPS

程式技術

超文本傳輸協定 (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. 接下來用戶端與伺服器端就可以使用對稱加密開始進行資料傳輸。

參考資料

Allen
written by
Allen

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

則留言
顯示更多留言
新增留言
訪客 2026 年 08 月 18 日