Https中間人攻擊

2021-10-10 06:07:52 字數 3075 閱讀 8523

防範方法:

一 、https連線過程及中間人攻擊原理

https協議就是http+ssl協議,如下圖所示為其連線過程:

1.https請求

客戶端向服務端傳送https請求;

2.生成公鑰和私鑰

服務端收到請求之後,生成公鑰和私鑰。公鑰相當於是鎖,私鑰相當於是鑰匙,只有私鑰才能夠開啟公鑰鎖住的內容;

3.返回公鑰

服務端將公鑰(證書)返回給客戶端,公鑰裡面包含有很多資訊,比如證書的頒發機構、過期時間等等;

4.客戶端驗證公鑰

客戶端收到公鑰之後,首先會驗證其是否有效,如頒發機構或者過期時間等,如果發現有問題就會丟擲異常,提示證書存在問題。如果沒有問題,那麼就生成乙個隨機值,作為客戶端的金鑰,然後用服務端的公鑰加密;

5.傳送客戶端金鑰

客戶端用服務端的公鑰加密金鑰,然後傳送給服務端。

6.服務端收取金鑰,對稱加密內容

服務端收到經過加密的金鑰,然後用私鑰將其解密,得到客戶端的金鑰,然後服務端把要傳輸的內容和客戶端的金鑰進行對稱加密,這樣除非知道金鑰,否則無法知道傳輸的內容。

7.加密傳輸

服務端將經過加密的內容傳輸給客戶端。

8.獲取加密內容,解密

客戶端獲取加密內容後,用之前生成的金鑰對其進行解密,獲取到內容。

中間人劫持攻擊

https也不是絕對安全的,如下圖所示為中間人劫持攻擊,中間人可以獲取到客戶端與伺服器之間所有的通訊內容。

中間人擷取客戶端傳送給伺服器的請求,然後偽裝成客戶端與伺服器進行通訊;將伺服器返回給客戶端的內容傳送給客戶端,偽裝成伺服器與客戶端進行通訊。

通過這樣的手段,便可以獲取客戶端和伺服器之間通訊的所有內容。

使用中間人攻擊手段,必須要讓客戶端信任中間人的證書,如果客戶端不信任,則這種攻擊手段也無法發揮作用。

二、中間人攻擊的預防

造成中間人劫持的原因是 沒有對服務端證書及網域名稱做校驗或者校驗不完整,為了方便,直接採用開源框架預設的校驗方式進行https請求

如volley

預防方法:

預防方式有兩種

以volley為例:校驗的實現方式如下

通過預埋證書建立 sslsocketfactory;

private static sslsocketfactory buildsslsocketfactory(context context,

int certrawresid) catch (keystoreexception e) catch (certificateexception e) catch (nosuchalgorithmexception e) catch (ioexception e)

string tmfalgorithm = trustmanage***ctory.getdefaultalgorithm();

trustmanage***ctory tmf = null;

try catch (nosuchalgorithmexception e) catch (keystoreexception e)

sslcontext sslcontext = null;

try catch (nosuchalgorithmexception e)

try catch (keymanagementexception e)

return sslcontext.getsocketfactory();

生成 經過ssl校驗及 網域名稱校驗的connection

以volley為例,重寫httpstrustmanager 中的checkservertrusted 方法,同時開啟網域名稱強校驗

三 webview的https安全

目前很多應用都用webview載入h5頁面,如果服務端採用的是可信ca頒發的證書,在 webview.setwebviewclient(webviewclient) 時過載 webviewclient的onreceivedsslerror() ,如果出現證書錯誤,直接呼叫handler.proceed()會忽略錯誤繼續載入證書有問題的頁面,如果呼叫handler.cancel()可以終止載入證書有問題的頁面,證書出現問題了,可以提示使用者風險,讓使用者選擇載入與否,如果是需要安全級別比較高,可以直接終止頁面載入,提示使用者網路環境有風險:

不建議直接用handler.proceed()。如果webview載入https需要強校驗服務端證書,可以在 onpagestarted() 中用 httpsurlconnection 強校驗證書的方式來校驗服務端證書,如果校驗不通過停止載入網頁。當然這樣會拖慢網頁的載入速度,需要進一步優化,具體優化的辦法不在本次討論範圍,這裡也不詳細講解了。

Https中間人攻擊

https也不是絕對安全的,如下圖所示為中間人劫持攻擊,中間人可以獲取到客戶端與伺服器之間所有的通訊內容。中間人擷取客戶端傳送給伺服器的請求,然後偽裝成客戶端與伺服器進行通訊 將伺服器返回給客戶端的內容傳送給客戶端,偽裝成伺服器與客戶端進行通訊。通過這樣的手段,便可以獲取客戶端和伺服器之間通訊的所有...

HTTPS攻擊(SSL TLS中間人攻擊)

攻擊機 kali 目標機 win7 攻擊前提 客戶端已經信任偽造證書頒發機構 攻擊者控制了核發證書頒發機構 客戶端程式禁止了顯示證書錯誤告警資訊 攻擊者已經控制客戶端,並強制其信任偽造證書。角色 客戶端 客戶路由器 真實伺服器 攻擊者 伺服器 攻擊者 伺服器 攻擊者通過arp欺騙客戶端通過攻擊者做閘...

Https如何防範中間人攻擊

在手機或者電腦和伺服器建立連線的時候,攻擊者通過工具或者技術手段將自己位於兩端之間,獲取資料,進行監聽活動的就是中間人攻擊。1.嗅探,監聽獲取連線資料報。2.資料報注入,將惡意資料報注入常規資料報裡面。因為是合法通訊流,使用者不易察覺。3.會話劫持,登入退出銀行賬戶就是乙個會話。會話中有很多重要資訊...