HTTPS 的工作原理牽涉到一些對稱/非對稱加密、公鑰私鑰,數位簽章等等的知識,所以需先對這些東西有一點概念
對稱加密演算法
加密與解密資料都使用同一把金鑰,比較單純,加解密速度快,常見的對稱演算法例如 DES、AES非對稱加密演算法
加密與解密使用不同的金鑰,一把為公開另一把為私有,使用其中一把加密時需用另一把才能解密,常見非對稱加密演算法例如 RSA、ElGamal數位簽章(Digital Signature)
數位簽章是一種用來認證文件來源的一種技術,類似現實生活中的簽名或指紋的概念,它用到了非對稱加密演算法例如一個機構 A 它有公鑰與私鑰,今天 A 將一份文件的用雜湊演算法算出它的 hash 值,稱為 message digest,將 hash 值用私鑰做加密後跟文件一起傳送給 B,就像在文件中附上自己的簽名一樣,B 用 A 的公鑰將 message digest 解出來然後跟文件的 hash 值相比,如果一樣就表示 message digest 的確是用 A 的私鑰加密的,也就表示文件的確是從 A 來的
CA (Certification Authority)
CA 是具有公信力的第三方機構,負責發放 HTTPS 憑證,想要使用 HTTPS 的網站需要跟 CA 機構申請憑證,網站需將自己的 HTTPS 公鑰、domain name、email address 與身分等等資料發給 CA,CA 審核過沒問題就會將這些資料加上自己的數位簽章發還給網站,網站就可以此證明自己是正常無害的網站HTTPS 工作流程如下圖所示
在瀏覽器一開始用 HTTPS 訪問網站時,會將瀏覽器支援的加密模式發給網站,網站會挑選一種瀏覽器支援的加密模式,將該加密模式、公鑰與 CA 發的憑證與傳給瀏覽器,以證明自己確實是該網站,在這個時候瀏覽器認得發放那個憑證的 CA,就會自動用該 CA 的公鑰來驗證該網站的憑證,若是不認得那個 CA,就會跳出訊息告知使用者,讓使用者決定是否要相信該 CA
假如已經確定了憑證沒問題,接下來就會用挑選好的加密模式來傳輸,瀏覽器會用網站的公鑰加密資料,網站用它的私鑰解密,這時還是在 initial 階段,兩邊使用非對稱加密演算法
藉著兩邊會協商好之後的資料傳輸要用的金鑰,這把金鑰每個 session 都會不一樣,是 random 產生,協商好之後網站跟瀏覽器就會用這把金鑰做網頁資料的加解密,也就是用對稱加密演算法,為什麼要用對稱加密演算法傳輸真正的資料,是因為效能考量,因為非對稱加密太慢了
除了協商加解密資料的演算法之外,也會協商要使用的雜湊演算法,這是用來保證資料完整性,防止資料有在途中被人竄改
實際上的網頁資料都會用協商好的加密算法加密起來,因此只有瀏覽器跟網站會知道他們到底傳輸了甚麼,其他人攔截到封包只會得到一串亂碼
Reference:
http://www.netadmin.com.tw/article_content.aspx?sn=1106140008
http://www.study-area.org/tips/certs/certs.html#validity
http://www.moserware.com/2009/06/first-few-milliseconds-of-https.html
沒有留言:
張貼留言