在Android

时间:2017-05-10 11:23:58

标签: android security ssl ssl-certificate certificate-pinning

我最近开始了解Android应用中的安全性,并希望实施证书固定。通过谷歌搜索找到一些有用的信息,但我偶然发现存储密钥库密码,其中包含服务器证书。

因为我不能相信Android文件系统保密我的密钥库密码,主要是因为任何有根的用户最终都能挖出来,我开始怀疑是否它是真的需要安全地存储这个密钥库密码,因为这个密钥库只包含我的服务器的SSL证书,该证书是公开的。

如果有人可以反编译我的APK并查看密钥库密码,我就无法考虑任何恶意攻击,因为攻击者无法修改任何密码应用程序的代码,因此更改,例如,目标服务器IP甚至修改密钥库切换我的证书与一些其他恶意证书,结合攻击者可以对目标进行的更改IP会使应用针对任何恶意服务器(man-in-the-middle-attack)工作。

我在Android here on github中找到了一个很好的证书固定示例,但遗憾的是作者并没有安全地存储密码,因为它是MainActivity的硬编码。

所以我总结的问题是:如果该密钥库仅包含在预期的公共SSL服务器证书中,是否真的需要保护密钥库密码?

根据我的研究,我发现on this question OP解决了将null作为密码传递给Android代码的可能性。也许我可以使用它并将密钥库密码存储在我的服务器上,而不是将其打包在Android应用程序中。

同时在我的谷歌搜索中,我找到了相当有用的文章,对于将来对此问题的任何人都可能会感兴趣:

  

进度更新 - 将null作为密钥库密码(如上所述作为其中一个选项)传递,如果您在生成密钥库时设置了密码存储密码,则会导致密钥库绕过:请求仍会被发送,而自定义密钥库则不会执行任何操作。没有抛出任何异常或其他任何异常,它就像您没有设置任何自定义密钥库一样。

 KeyStore trustStore = KeyStore.getInstance("BKS");
 trustStore.load(keyStoreInputStreamFromResources, null);

0 个答案:

没有答案