2017-06-22 203 views
0

你好我正在使用Android與https的Socket,所以需要使連接安全。所以對於安全connnection我用這CERTIFICATE-SSL安卓證書問題

private final TrustManager[] trustAllCerts= new TrustManager[] { new X509TrustManager() { 
    public java.security.cert.X509Certificate[] getAcceptedIssuers() { 
     return new java.security.cert.X509Certificate[] {}; 
    } 
    public void checkClientTrusted(X509Certificate[] chain, 
            String authType) throws CertificateException { 
    } 
    public void checkServerTrusted(X509Certificate[] chain, 
            String authType) throws CertificateException { 
    } 
} }; 

現在運作良好,連接也建立了,但我不理解或我不知道,使用這種類型的證書,是安全與否?我應該使用這個還是不是?

+0

這種類型的實現是安全的,因爲證書用於建立連接,但如果您需要更多的安全性,您可以使用X509Extension類 – Satyavrat

+0

但我認爲這個證書是所有類型都信任的,所以這是否安全?第二個是如果我把證書文件放在原始文件夾中,並從那裏使用有這麼好或不好? – aj0822ArpitJoshi

+0

證書可能有效,但也可能來自攻擊者。一個答案是固定證書,即驗證證書是否來自您期望連接的源。注意:超過1,500個讓我們加密證書已經以某種形式發佈在名字上的「pay pal」上。 – zaph

回答

0

不,這是易受攻擊Man-in-the-middle攻擊!

您正在使用https,所以數據在傳輸時被加密,這是很好的。但是沒有檢查另一方是你期望它是誰,這是不好的。

上述定製TrustManager不作任何檢查並隱含信任一切。在代碼中它甚至被稱爲trustAllCerts,您明確要做而不是想要做的。您需要檢查證書鏈以查看它是否來自您信任的來源。

問題是,攻擊者可以通過在您和端點之間放置代理來攔截您的https流量。攔截代理可以提供自己的證書,因此可以解密流量並隨心所欲地執行任何操作。它也可以與端點建立一個https連接並讀取從那裏獲得的數據。因此,攻擊者可以閱讀你發送的內容,可以閱讀你將收到的內容,並可以改變你發送和接收的內容。

+0

所有的真實但沒有解決方案。一個答案是固定證書,即驗證證書是否來自您期望連接的源。 – zaph