簡單介紹 HTTPS
超文本傳輸協定 (HyperText Transfer Protocol,簡寫 HTTP),是全球網際網路的基礎,在網際網路剛剛起步的年代,就是依據 HTTP 這個協定來傳輸來自世界各地的通訊。
從 2000 年後,HTTP 逐漸被 HTTPS (HyperText Transfer Protocol Secure) 取代,主要原因就在於 HTTP 並不安全,如果遇到未使用 HTTPS 的網站,現今的瀏覽器甚至還會提出警告。
HTTP 最大的問題在於傳輸時是使用明文傳輸,意思就是你在網站輸入的任何敏感資訊,包含帳號密碼、信用卡資料…等,在傳輸過程中都是沒有加密的,只要攻擊者能攔截傳輸的訊息,就能輕鬆地獲取敏感資訊。
HTTPS 便是為了解決這個問題而存在的,HTTPS 是 HTTP 的擴展,因此 HTTPS 並非是獨立的通信協定,而是 HTTP 與 SSL/TLS 的結合,與 HTTP 差別在於多了一層加密。
對稱加密與非對稱加密
在介紹 HTTPS 的原理前,首先需要簡單理解一下何謂對稱加密與非對稱加密。
對稱加密
加密與解密使用同一組密鑰,這組密鑰可能會有兩個或多個成員間持有,以便維持通訊 (常見的對稱加密有 AES、3DES、DES)。
對稱加密有以下優缺點:
- 優點:計算量小,因此加密速度與效率高,適合加密比較大的資料。
- 缺點:若要通訊,就必須把密鑰傳給對方,這個過程很有可能導致密鑰被竊取,因此對稱加密並不能完全保證安全。
為了避免將對稱加密的密鑰在傳給對方的途中被竊取,便產生了非對稱加密。
非對稱加密
加密與解密會使用兩個完全不同的金鑰,一組公鑰與一組私鑰。公鑰可以公開,並用來加密。私鑰由自己持有,並用來解密。
簡單舉個例子,假設有 A 與 B,當 A 想把敏感資訊傳給 B 時,A 可以這麼做。
- A 先跟 B 拿取 B 的公鑰。
- A 用 B 的公鑰加密敏感資訊。
- A 將加密的敏感資訊傳給 B。
- B 用自己的私鑰解密 A 傳過來的加密敏感資訊。
可以這麼說,公鑰就像是保險箱,而私鑰是保險箱的鑰匙,當小王想傳東西給小明,小王可以跟小明拿他的保險箱,把東西放進保險箱後再還給小明,小明就可以用保險箱鑰匙打開保險箱並取得裡面的東西。
由於保險箱的鑰匙 (私鑰) 從頭到尾都沒有傳給別人,因此非對稱加密比對稱加密更為安全。但比較安全的代價,就是運算過程非常複雜,運算效率遠不及對稱加密。
因此在實際狀況,非對稱加密只會用在加密對稱加密使用的密鑰,確保對稱加密的密鑰不會外洩,之後資訊的傳輸,都是使用對稱加密,確保效率。
當你訪問有 HTTPS 的網站
網站如果想要掛上 HTTPS,就必須要去跟憑證頒發機構 (Certificate Authority,簡稱 CA) 申請數位憑證,申請成功後就可以從 CA 那裡取得憑證與公私鑰。
私鑰由網站伺服器端保存,不可以外洩,公鑰則是附帶在憑證中,可以公開,憑證本身會附帶一個電子簽名,用來驗證憑證的完整性和真實性,防止憑證被篡改。
當用戶訪問一個 HTTPS 的網站,用戶端與伺服器端會做哪些事情呢?
- 用戶端訪問網站,請求被發送至網站伺服器端的 443 port (HTTPS 預設通訊埠號,HTTP 為 80 port)。
- 伺服器端接到用戶請求,將憑證傳送給用戶端。憑證除了公鑰,還有其他如 CA 相關資訊與憑證有效期限,瀏覽器會去判斷憑證是否正確、有無被竄改還有是否過期。
- 如果憑證沒有問題,用戶端就會隨機生一個由亂數組成的 Key (對稱密鑰) ,並用憑證中的公鑰加密此 Key。
- 用戶端將加密過後的 Key 傳送給伺服器端,作為之後通訊用的對稱密鑰。
- 伺服器端收到加密的 Key,用私鑰解密並取得 Key。避免對稱加密中密鑰可能洩漏的問題。
- 接下來用戶端與伺服器端就可以使用對稱加密開始進行資料傳輸。