2011-03-04 32 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

相关问题