99久久精品国产自在首页,亚洲最大av网站在线观看,一区二区,久久国产,亚洲综合色区另类av,永久黄网站色视频免费下载

藍(lán)風(fēng)游戲賬號交易系統(tǒng)源碼 - 專業(yè)的游戲賬號交易系統(tǒng)源碼

資訊熱點
HTTPS連接過程和中間人攻擊劫持

發(fā)布時間:2020-9-5 分類: 行業(yè)資訊

首先,HTTPS連接過程和中間人攻擊原理

https協(xié)議是http + ssl協(xié)議,如下圖所示:連接過程:

1.https請求

客戶端向服務(wù)器發(fā)送https請求;

2.生成公鑰和私鑰

服務(wù)器收到請求后,會生成公鑰和私鑰。公鑰相當(dāng)于一個鎖,私鑰相當(dāng)于一個密鑰,只有私鑰才能打開公鑰鎖定的內(nèi)容;

3.返回公鑰

服務(wù)器將公鑰(證書)返回給客戶端。公鑰包含大量信息,如證書的頒發(fā)機(jī)構(gòu),到期時間等;

4.客戶端驗證公鑰

在收到公鑰后,客戶端將首先驗證它是否有效,例如發(fā)布機(jī)構(gòu)或到期時間。如果發(fā)現(xiàn)錯誤,將拋出異常,表明證書存在問題。如果沒有問題,則生成隨機(jī)值作為客戶端密鑰,然后使用服務(wù)器的公鑰進(jìn)行加密;

5.發(fā)送客戶端密鑰

客戶端使用服務(wù)器的公鑰加密密鑰并將其發(fā)送到服務(wù)器。

6.服務(wù)器接收密鑰并對稱加密內(nèi)容

服務(wù)器接收加密密鑰,使用私鑰對其進(jìn)行解密,并獲取客戶端密鑰。然后,服務(wù)器對稱地加密要傳輸?shù)膬?nèi)容和客戶端的密鑰,這樣除非密鑰已知,否則服務(wù)器無法知道。轉(zhuǎn)移的內(nèi)容。

7.加密傳輸

服務(wù)器將加密的內(nèi)容發(fā)送到客戶端。

8.獲取加密內(nèi)容,解密

在客戶端獲得加密內(nèi)容之后,它使用先前生成的密鑰對其進(jìn)行解密以獲得內(nèi)容。

中間人劫持攻擊

Https也不是絕對安全的。下圖顯示了中間人劫持攻擊。中間人可以獲得客戶端和服務(wù)器之間的所有通信內(nèi)容。

HTTPS連接過程和中間人攻擊劫持

中間人攔截客戶端發(fā)送給服務(wù)器的請求,然后假裝客戶端與服務(wù)器通信;由服務(wù)器返回給客戶端的內(nèi)容被發(fā)送到客戶端,假裝服務(wù)器與客戶端通信。

這樣,可以獲得客戶端和服務(wù)器之間的所有通信內(nèi)容。

使用中間人攻擊,客戶端必須信任經(jīng)紀(jì)人的證書。如果客戶端不信任,則攻擊無效。

第二,預(yù)防中間人攻擊

劫持中間人的原因是沒有驗證或驗證服務(wù)器證書和域名。為方便起見,https請求直接由開源框架的默認(rèn)身份驗證方法采用。

如凌空

HTTPS連接過程和中間人攻擊劫持

HTTPS連接過程和中間人攻擊劫持

OKhttp3.0

HTTPS連接過程和中間人攻擊劫持

預(yù)防方法:

有兩種方法可以阻止它

1.對于具有高安全性要求的應(yīng)用程序,您可以使用客戶端的嵌入式證書來鎖定證書。只有當(dāng)客戶端證書和服務(wù)器的證書相同時,才允許通信,例如某些銀行應(yīng)用程序,但此方法面臨問題,證書過期,因為證書具有一定的有效期,當(dāng)嵌入式證書過期時,它可以只能通過強(qiáng)制更新或要求用戶下載證書來解決。

以凌空為例:驗證的實施如下:

使用預(yù)嵌入證書創(chuàng)建SSLSocketFactory;

私有靜態(tài)SSLSocketFactory buildSSLSocketFactory(Context context,

Int certRawResId){

KeyStore keyStore=null;

試試{

keyStore=buildKeyStore(context,certRawResId);

} catch(KeyStoreException e){

e.printStackTrace();

} catch(CertificateException e){

e.printStackTrace();

} catch(NoSuchAlgorithmException e){

e.printStackTrace();

} catch(IOException e){

e.printStackTrace();

}

String tmfAlgorithm=TrustManagerFactory.getDefaultAlgorithm();

TrustManagerFactory tmf=null;

試試{

Tmf=TrustManagerFactory.getInstance(tmfAlgorithm);

Tmf.init(用于keyStore);

} catch(NoSuchAlgorithmException e){

e.printStackTrace();

} catch(KeyStoreException e){

e.printStackTrace();

}

SSLContext sslContext=null;

試試{

sslContext=SSLContext.getInstance('TLS');

} catch(NoSuchAlgorithmException e){

e.printStackTrace();

}

試試{

sslContext.init(null,tmf.getTrustManagers(),null);

} catch(KeyManagementException e){

e.printStackTrace();

}

返回sslContext.getSocketFactory();

通過ssl校驗和和域名驗證生成連接

HTTPS連接過程和中間人攻擊劫持

HTTPS連接過程和中間人攻擊劫持

2對于通用應(yīng)用程序的安全性要求,您可以使用驗證域名,證書有效性,證書密鑰信息和證書鏈的方法

在volley的情況下,重寫HTTPSTrustManager中的checkServerTrusted方法并啟用強(qiáng)域名驗證

三,Webview HTTPS安全性

目前,許多應(yīng)用程序使用webview加載H5頁面。如果服務(wù)器使用由受信任CA頒發(fā)的證書,則webViewClient的onReceivedSslError()將在webView.setWebViewClient(webviewClient)中被覆蓋。如果發(fā)生證書錯誤,則直接調(diào)用handler.proceed。將忽略錯誤并繼續(xù)加載帶有問題頁面的證書,如果調(diào)用handler.cancel()可以終止有問題的頁面加載證書,證書有問題,可以提示用戶冒險,讓用戶選擇是否加載,如果需要安全級別更高,可以直接終止頁面加載,提示用戶冒網(wǎng)絡(luò)環(huán)境風(fēng)險:

HTTPS連接過程和中間人攻擊劫持

建議不要直接使用handler.proceed()。如果webview在加載https時需要強(qiáng)烈驗證服務(wù)器證書,則可以使用HttpsURLConnection驗證服務(wù)器證書以驗證onPageStarted()中的證書。如果驗證沒有停止加載網(wǎng)頁。當(dāng)然,這會降低網(wǎng)頁的加載速度,需要進(jìn)一步優(yōu)化。具體的優(yōu)化方法不在本討論范圍內(nèi),此處不再詳述。

« 張澤田的朋友圈回應(yīng)了劉強(qiáng)東的案子:只要家人在一起,就完整了 | Ofo Daiwei被列入“賴來”名單:不能坐車或買房 »