2011-03-04 50 views
1

當談到SSL和安全性時,我是一個完全新手。我發現如何加載信任定製SSL證書密鑰庫下面的示例中(這是使用Apache了HTTPClient,順便說一句):可以在我的應用程序中對我的密鑰庫的密碼進行硬編碼嗎?

private SSLSocketFactory newSslSocketFactory() { 
    try { 
    KeyStore trusted = KeyStore.getInstance("BKS"); 
    InputStream in = context.getResources().openRawResource(R.raw.mystore); 
    try { 
     trusted.load(in, "ez24get".toCharArray()); 
    } finally { 
     in.close(); 
    } 
    return new SSLSocketFactory(trusted); 
    } catch (Exception e) { 
    throw new AssertionError(e); 
    } 
} 

我想你需要以修改密鑰庫訪問設備,但是仍然...在密碼存儲密碼(「ez24get」)在代碼中可用的事實中沒有問題嗎?妥協包含此代碼的應用程序需要做什麼?

+0

我會說它聞起來,但我不是一個Android開發人員。你還有什麼其他選擇來存儲它?它可以被散列嗎? – alex 2011-03-04 00:23:30

+0

我不知道。我正在想方法,我可以將密碼存入應用程序,而無需將其存儲在某個地方。如果我將它打包加密,那麼我需要密鑰出現在代碼中,所以同樣的問題。 Android沒有像黑莓那樣的內置硬件加密技術。如果我在第一次啓動應用程序時下載它,我需要一些方法來驗證它確實是我的應用程序請求的密碼,而不是其他人。通常,這種事情是通過SSL完成的,如果我無法訪問密鑰庫,則無法使用SSL。 :-P男人,我不知道有人有這樣的想法。 – 2011-03-04 00:45:27

回答

1

如果這是你願意承擔的風險。

任何有足夠的決心反編譯你的代碼的人都可以得到它。即使你混淆了你的代碼,你仍然冒着風險,因爲他們所需要做的就是找到字符串。

+0

對。然後,一旦他們這樣做,他們必須獲得用戶設備的root訪問權限(這可能還需要物理訪問權限),將他們自己的僞造證書插入密鑰存儲區,將設備返回給用戶而不知道它們,並最終在他們使用我的應用程序時攔截他們的連接。這將是一個非常大的PITA,所以它對於大多數目的來說足夠安全。但仍不完全安全。或者我錯過了什麼? – 2011-03-04 00:50:00

+0

此外,我想我可以存儲密鑰存儲文件的MD5,並在應用程序啓動時檢查它以確保沒有人遇到它。然後爲了妥協應用程序,他們也必須編輯類文件。 – 2011-03-04 00:52:18

相關問題