2012-04-24 18 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

相关问题