1. 程式人生 > 其它 >Https如何讓防止被監聽

Https如何讓防止被監聽

此前我一直對 https / ssl 如何 保護資料不被竊聽有點疑問,因為 伺服器 的證書是公開的,只能實行上行方向的資料加密,下行資料的加密我一直認為是 瀏覽器 會自動生成一個 客戶端 的金鑰對並將公鑰發給伺服器。今天仔細研究了 https / ssl ,發現其實並不像我想的那樣,這裡面既有非對稱加密,又因為效能原因使用了對稱加密。其原理大概是這樣的: , T) q& o4 h- B( n3 C6 c. t

  • 客戶端瀏覽器連線到https/ssl伺服器,併發送ssl版本號等資訊到伺服器,協商此次連線使用的版本和引數
  • 伺服器根據客戶端發來的協商資料和自身支援的特性返回客戶端協商引數,並且將伺服器的證書傳送給客戶端,伺服器的證書裡包括用於非對稱加密的伺服器的公鑰
  • 客戶端收到伺服器的證書,可以用於鑑別伺服器身份,防止假冒的伺服器。但最重要的用處是將一段由客戶端瀏覽器隨機生成的資料pre-master secret用伺服器證書裡的公鑰進行加密,發給伺服器。注意,因為這段加密的資料只由用伺服器的私鑰才能解密,所以pre-master secret不會被人監聽到。
  • 伺服器收到加密後的pre-master secret資料後,用自己的私鑰解密得到原始的pre-master secret,並使用一定演算法得到對稱加密的金鑰master secret。
  • 客戶端也根據同樣的演算法得到master secret。
  • 至此,客戶端和伺服器之間的上/下行資料傳送使用對稱加/解密,初始金鑰為master secret。常用的對稱加密演算法有RC4,AES等。
: l- D; M+ L/ A, l+ c+ U8 b: B
$ M6 m6 k. M, F6 ^: Mr& Z
經過這些步驟就可以保證 https / ssl 上下行資料不被監聽並且加/解密速度也可以接受。 ; q/ _* I4 @7 r1 ?) O
當我們設計自己的加密通訊協議時完全可以照搬 https / ssl 這種方式,有時還可以簡化掉證書的傳遞步驟。
另外 https / ssl 還支援客戶端身份驗證,這時就需要將客戶端證書上傳到伺服器,但這個證書並不用來加密下行資料。