Android上是否有任何系统证书存储?

时间:2014-02-12 12:54:27

标签: java android ssl encryption cryptography

在桌面Java中,存在一个sun.security.mscapi.SunMSCAPI cryptoprovider,我们可以使用它与KeyStore一起访问Windows系统证书存储。

我知道Android上有类似的商店,但我找不到管理这些商店的方法(列出,添加,删除证书)。

我发现的是:

1)使用KeyChain,但这需要通过Activities与用户进行额外的交互; 2)在桌面上使用KeyStore并直接加载存储文件,但这些文件的路径在所有设备上都不是恒定的。

我还不知道其他任何方法吗?

1 个答案:

答案 0 :(得分:3)

KeyChain是一个相对较新的补充。它仅适用于API 14(冰淇淋三明治)及更高级别。 Nicolay Elenkov在Using the ICS KeyChain API上有一篇很好的博客文章。

KeyStore是一个更新的补充。它仅适用于API 18(Jelly Bean MR2)及更高版本。 Nicolay Elenkov在Credential storage enhancements in Android 4.3上有另一个很好的博客文章。

您可能也对Android Developer's Blog中的Unifying Key Store Access in ICS感兴趣。它告诉我们KeyStore自API 4(Donut)以来一直存在,但只有系统可以使用它,它只用于VPN机密(后来添加了Wifi)。

直到最近,用户证书商店才被打破。要从商店中删除证书,您必须删除整个商店(甚至是您要保留的证书和私钥)。请参阅User key/cert management in ICS

系统的证书存储区曾经存储在ROM中。在Diginotar failure之后发生了变化,因为Android必须构建新图像才能删除受损的Diginotar根。鉴于许多运营商不支持他们的设备,那里仍有数百万(可能是数十亿)有缺陷的设备。

如果您想要最吸引Android设备的东西,那么您可能需要使用自己的商店。也许Java Keystore或SQLciper是个不错的选择。只需确保数据库使用从用户输入的内容(如秘密)派生的密钥进行加密。将用户的秘密与存储在沙箱或KeyStore中的文件系统上的随机值相结合,以获得最大效果。

如果您未接受用户的输入,则会遇到“无人值守密钥存储”问题。这是一个没有解决方案的问题。例如,见Peter Guttman的Engineering Security