2012-04-24 61 views
3

我正在創建一個移動應用程序(包括Android和iPhone)並計劃要求客戶端SSL認證。爲此,我的應用程序已將其客戶端證書文件放入其中。在Android端,這是包含私鑰的密鑰存儲區。密鑰存儲區和密鑰都有密碼。使用客戶端SSL身份驗證時,如何/在哪裏存儲密鑰庫密碼?

我的問題:我應該如何將密碼存儲到密鑰存儲區和密鑰?

應用程序代碼需要這些才能在與服務器建立SSL連接時打開密鑰存儲區,因此它們需要可供應用程序訪問。

它們應該作爲應用程序源代碼中的模糊字符串存儲嗎?還是有一些更普遍接受(閱讀:更好)的方式做到這一點,我沒有看到?

回答

1

用於保護密鑰庫的加密基於密碼,所以您需要(1)將密碼存儲在客戶端的某處,或者(2)在啓動客戶端時詢問用戶密碼應用程序。你需要做什麼取決於你的用例。如果(2)可以接受,那麼你已經保護了你的憑證免受逆向工程,因爲它將被加密並且密碼將不會被存儲在任何地方(但用戶需要每次都鍵入)。如果你這樣做(1),那麼有人能夠逆向工程你的客戶端,獲得密碼,獲得密鑰庫,解密私鑰和證書,並創建另一個能夠連接到服務器的客戶端 - 這是真的無論你在哪裏存儲這個密碼(可以在編譯的應用程序代碼中,作爲你的APK /包中的資源,在SharedPreference中,在數據庫中等等;它仍然在那裏,它將以某種可以理解的形式存在

沒有什麼可以做的,以防止這種情況;你可以使你的代碼變得更難(通過混淆等),但是你不能使它變得不可能,你需要確定你嘗試的風險是什麼用這些方法減輕是多少,值得做多少的工作來減輕它的影響。

+0

Wha我問的是如何存儲密碼。選項1。我意識到從應用程序中獲取密碼永遠不可能,即使它是由代碼生成的。我問的是,「在應用程序中混淆密碼的'最佳'方法是什麼?」鑑於我不能讓它變得不可能,是否有辦法讓它變得「最困難」? – jph 2012-04-24 17:10:27

+0

好吧,把它放在你的應用程序代碼中,然後通過一個非常好的混淆過程/工具來運行它(你的整個客戶端應用程序)可能是你可以在這裏做的「最好的」事情。 – jeffsix 2012-04-24 17:11:58

相關問題