安卓系统上有系统证书存储吗?

4
在桌面Java中,存在一个sun.security.mscapi.SunMSCAPI加密提供程序,我们可以使用它与KeyStore一起访问Windows系统证书存储。
我知道Android上也有类似的存储,但我找不到管理这些存储(列出、添加、删除证书)的方法。
我发现的是:
1)使用KeyChain,但这需要通过Activities与用户进行额外的交互; 2)像在桌面上那样使用KeyStore并直接加载存储文件,但这些文件的路径在所有设备上都不是固定的。
还有其他我不知道的方法吗?
1个回答

3

KeyChain 是一个相对较新的补充。它只在API 14(冰激凌三明治)及以上版本可用。Nicolay Elenkov 在他的博客文章“使用ICS KeyChain API”中介绍了它。

KeyStore 更是一个更新的补充。它只在API 18(Jelly Bean MR2)及以上版本可用。Nicolay Elenkov 在另一篇好的博客文章“Android 4.3的凭据存储增强”中介绍了它。

你还可能对ICS中的密钥库访问统一感兴趣,它来自于Android开发者博客。它告诉我们,KeyStore 自API 4(甜甜圈)就已存在,但只有系统才能使用它,而且只用于 VPN 密钥(Wifi 后来才被添加)。

最近,用户证书存储库有些问题。要从存储库中删除证书,您必须删除整个存储库(即使您想保留的证书和私钥)。参见ICS中的用户密钥/证书管理

系统的证书存储库曾经存在于 ROM 中。由于Diginotar 失败事件,这种情况已经改变了,因为 Android 必须构建新镜像来删除受损的 Diginotar 根证书。考虑到如此多的运营商不支持他们的设备,仍然有数百万(甚至可能数十亿)有缺陷的设备仍在使用。

如果您想要适用于最大选择的 Android 设备,则可能需要使用自己的存储库。也许 Java Keystore 或SQLciper 是一个不错的选择。只需确保数据库使用从用户输入的某些内容(如密码)派生而来的密钥进行加密。为了达到最大效果,请将用户的密码与存储在您的沙盒或 KeyStore 中的随机值相结合。

如果不使用用户输入,则会遇到“无人值守密钥存储”问题。这是一个没有解决方案的问题。例如,可以参考 Peter Guttman 的Engineering Security


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接