大家都知道:HTTPS = HTTP + SSL/TSL 也就是,https是在http基礎上加了一層加密。 這也由此衍生出一個問題 —— https的加密用的是對稱加密還是非對稱加密,是否全程都是用的一種加密方式? 這個問題引起了我的興趣,去查閱了下資料,瞭解了一下,這裡做個簡單的總結備忘。
1. 什麼是對稱加密和非對稱加密?
這個詳細來說有點複雜,這裡簡單的說下:
對稱加密就是加密和解密用的是同一個金鑰k。 非對稱加密是傳送端使用公開的公鑰a加密,然後接收端使用私密的私鑰b解密。
對稱加密快,非對稱加密安全。對稱加密如DES,非對稱加密如RSA。
2. 那https的加密是用的對稱加密還是非對稱加密呢?
答案是——兩者都用了
這裡讓我們先看看一個完整的https請求的過程:
- 首先,瀏覽器請求一個url,找到伺服器,向伺服器發起一個請求。伺服器將自己的證書(包含伺服器公鑰S_PuKey)、對稱加密演算法種類及其他相關資訊返回客戶端。
- 瀏覽器檢查CA證書是不是由可以信賴的CA機構頒發的,確認證書有效和此證書是此網站的。如果不是,給客戶端發一個警告,詢問是否繼續訪問。
- 如果是,客戶端使用公鑰加密了一個隨機對稱金鑰,包括加密的URL一起傳送到伺服器
- 伺服器用自己的私匙解密了你傳送的鑰匙。然後用這把對稱加密的鑰匙給你請求的URL連結解密。
- 伺服器用你發的對稱鑰匙給你請求的網頁加密。你也有相同的鑰匙就可以解密發回來的網頁了。
說起來複雜,簡單總結起來就是:
使用非對稱加密傳輸一個對稱金鑰K,讓伺服器和客戶端都得知。然後兩邊都使用這個對稱金鑰K來加密解密收發資料。因為傳輸金鑰K是用非對稱加密方式,很難破解比較安全。而具體傳輸資料則是用對稱加密方式,加快傳輸速度。兩全其美。
這麼想來,https的設計真的是一個非常棒的設計,同時兼顧了安全和速度,可以說是比較完善了。