標籤:
HTTPS在傳輸資料之前需要用戶端(瀏覽器)與服務端(網站)之間進行一次握手,在握手過程中將確立雙方加密傳輸資料的密碼資訊。握手過程的簡單描述如下:
1.瀏覽器將自己支援的一套加密規則發送給網站。
2.網站從中選出一組密碼編譯演算法與HASH演算法,並將自己的身份資訊以認證的形式發回給瀏覽器。認證裡麵包含了網站地址,加密公開金鑰,以及認證的頒發機構等資訊。
3.獲得網站認證之後瀏覽器要做以下工作:
a) 驗證認證的合法性(頒發認證的機構是否合法,認證中包含的網站地址是否與正在訪問的地址一致等),如果認證受信任,則瀏覽器欄裡面會顯示一個小鎖頭,否則會給出認證不受信的提示。
b) 如果認證受信任,或者是使用者接受了不受信的認證,瀏覽器會產生一串隨機數的密碼,並用認證中提供的公開金鑰加密。
c) 使用約定好的HASH計算握手訊息,並使用產生的隨機數對訊息進行加密,最後將之前產生的所有資訊發送給網站。
4.網站接收瀏覽器發來的資料之後要做以下的操作:
a) 使用自己的私密金鑰將資訊解密取出密碼,使用密碼解密瀏覽器發來的握手訊息,並驗證HASH是否與瀏覽器發來的一致。
b) 使用密碼加密一段握手訊息,發送給瀏覽器。
5.瀏覽器解密並計算握手訊息的HASH,如果與服務端發來的HASH一致,此時握手過程結束,之後所有的通訊資料將由之前瀏覽器產生的隨機密碼並利用對稱式加密演算法進行加密。
這裡瀏覽器與網站互相發送加密的握手訊息並驗證,目的是為了保證雙方都獲得了一致的密碼,並且可以正常的加密解密資料,為後續真正資料的傳輸做一次測試。
對於https的攻擊更多的是採用假認證的方法來欺騙用戶端。在瀏覽器和網站的握手過程中,瀏覽器在獲得網站認證後需要驗證認證的合法性,在安卓程式中google 的API會對認證的合法性進行檢查,檢查包括以下幾方面內容: 簽名CA是否合法; 網域名稱是否匹配;是不是自我簽署憑證;認證是否到期。發現異常後即終止請求並拋出異常。因此在安卓應用開發時developer通常覆蓋google的認證檢查機制(X509TrustManager)來通過測試。而在覆蓋的檢測機制中忽略對認證的安全性檢查,接受異常的 https認證,繼續危險連結。
利用這個漏洞可以利用假認證來進行流量劫持 (偽造fake wifi, DNS劫持等)。
Https漏洞在安卓程式中