2017-09-06 43 views
1

我在尋找2天內解決問題,但我找不到它。如何在android中使用ssl時增加安全性volley

我的問題:

我已經安裝在服務器上的Comodo SSL/TLS證書,我使用的Android凌空庫連接到服務器,到現在爲止我是使用只是「https://開頭...」爲我的網址和連接通過https連接到我的服務器沒有問題。 但我最近在我的手機上安裝了「數據包捕獲」android應用程序,默認設置和沒有固定的手機無法從我的應用程序向服務器檢索發佈/響應信息,但是當您使用固定電話時,數據包捕獲應用程序要求你在手機上安裝一個自定義證書,以便它可以檢索甚至ssl/tls連接,起初我雖然是在開玩笑,但是在安裝證書之後,它顯示了用於連接到我的服務器的全部信息... 我非常擔心我的應用程序的安全性,黑客可以使用該捕獲應用程序來知道要將什麼發送到我的服務器,並將他的硬幣編號設置爲例如100000 :(

請給我一種方法讓我的應用程序連接更安全 *我沒有在ap上安裝自定義證書p,因爲服務器證書是可信的並且可以正常使用。

對不起我的英語不好打字:)

編輯: 感謝@ Ch4t4r的想法......我搜查,發現這對釘扎的公共密鑰,它是如此之大,這裏是GitHub的鏈接: https://github.com/faruktoptas/volley-public-key-pinning

希望它可以幫助別人有同樣的問題

+0

這看起來好像跟SSL沒有任何關係。您的服務器的API將始終可見(或多或少)。爲什麼簡單的請求可以設置硬幣編號?也許你的服務器應該認證/限制請求。 – jHilscher

+0

@jHilscher實際上並不那麼簡單,但我很依賴ssl來保護通信,例如,你可以嗅探instagram請求嗎?我需要這樣的東西 – niafara

回答

2

該應用程序的工作原理如下(總結)方式:

  1. 您的應用程序試圖建立
  2. 該應用程序捕獲請求並將其轉發
  3. 該應用從服務器獲取到的答案,取代它的證書

這是一個典型的人爲你的服務器的連接因爲您使用的應用程序的證書是可信的,所以中間人攻擊是有效的。您無法阻止有根的用戶破壞您的加密。


你唯一能做的就是默默無聞的安全。嘗試對您的值進行編碼(補充值,或者使用存儲在您的應用中的密鑰對其進行加密)或發送整個請求的散列。這將鎖定大多數人(非技術人員),但是沒有絕對的辦法阻止用戶以這種方式作弊。你可以做的就是使用一次性令牌(鹽的種類)來編碼你的重要價值。混淆你的源代碼也會有所幫助。但是,再一次,沒有絕對的辦法,這只是在用戶的方式鋪設石塊,甚至可以作弊。這大大增加了如何做到這一點所需的時間。

我不會浪費到多少時間就可以了,這裏的原因:

  • Android設備的大約20-25%植根(根據一些較舊的數據。我猜想它實際上更少)
  • 一些有根的設備是測試或存儲設備(Kiosk模式);讓它成爲所有根設備的15%
  • 如果其他有根的用戶中有50%知道該應用程序(它不會那麼高),我們低至所有Android用戶的8.5%
  • 使用安全通過默默無聞的原則,只有技術高超的用戶才能夠弄清楚如何作弊。如果這種情況適用於所有用戶的20%(再次,這是一個非常高的數字),我們佔所有Android用戶的1.7%。
  • 考慮到並非所有這些用戶都可能使用您的應用,有些人可能根本不在乎,我會將能夠欺騙和使用您的應用的用戶百分比設置爲最大爲。


更激烈的方法是阻止所有根用戶。
編輯:另一個答案表明你可以使用公鑰固定。請記住,並非所有用戶都傾向於在發佈新版本時立即進行更新,否則,如果您的應用程序不這樣做,那麼您的應用程序就會無效。因此它有一個小風險。

+0

感謝您的回答ch4t4r,你說的事情是真實的,但如果我是黑客,那麼我絕對有一個根深蒂固的手機,雖然當我只是一個開發人員,我有一個根深蒂固的手機認爲是什麼做一個黑客有! ,所以你不知道是否有辦法強制使用主要和可信任的證書,而不是其他任何證書?我想知道是否有一種方法可以在安裝不受信任的應用程序,vpn或證書時停止發送數據? – niafara

+0

同樣,您可以阻止所有根用戶。但相信我,沒有黑客會專門針對你的應用。我的計算或多或少準確。如果你想阻止根深蒂固的用戶進行作弊,可以通過默默無聞的方法或者開發一種智能算法來檢測不合理的分數。 – Ch4t4r

+0

我編輯了我的評論上面,是的,我可以識別他們,但它的第二個目標,首先我想停止這個......你知道我剛打開那個「數據包捕捉」的應用程序,然後試圖嗅探instagram,然後instagram失敗了,在捕獲包應用程序中顯示...你知道我想要這樣的 – niafara

1

我不確定您的應用程序編寫了哪種編程語言,但您可以查看證書鎖定以防止這些攻擊。您的代碼會在發送任何請求之前檢查SSL證書,如果值不匹配,則可能導致應用失敗並顯示錯誤消息。

https://www.owasp.org/index.php/Certificate_and_Public_Key_Pinning

+0

這就是我正在尋找的東西,我正在寫一個android應用程序,使用java語言的android工作室...你能給我一些Java代碼來檢查你所說的ssl證書嗎? – niafara

相關問題