【发布时间】:2017-03-14 19:08:48
【问题描述】:
在 Android 7 Nougat 中,用户安装的证书转到“用户凭据”而不是“受信任的凭据”(由系统凭据和用户凭据组成)。
我曾经通过以下方式访问“受信任的凭据”:
KeyStore keystore = KeyStore.getInstance("AndroidCAStore");
通过上面的代码,我可以访问系统和用户信任的凭据。
但现在,在 Android 7 中,用户安装的证书会转到 Settings --> Security --> User credentials 下一个名为“用户凭据”的单独位置。
我的问题是如何在 Android 7 中以编程方式列出 User credentials 中的凭据?
【问题讨论】:
-
阅读文档我会假设如果通过 <trust-anchors> 配置应用程序具有对用户证书的隐式访问权限(因为它会自动为 AP23 及以下的应用程序完成)。我还没有读到任何可以显式访问用户凭据存储的方法。
-
我在
<trust-anchors>中添加了<certificates src="user"/>,但是,我的应用仍然不信任位于“用户凭据”下的我的证书。 -
我认为你可能误解了
Settings-->Security-->User credentials。它显示用户安装的证书和私钥,而不是受信任的证书。 Android6 可以管理用户证书,但您无法在设置中看到它们,只有根 CA。当您安装 PKCS#12 时,可以在 KeyChain 中访问私钥,并且可以将根 CA 安装为AndroidCAStore中的用户信任凭证。 AndroidCAStore 包含用户和系统条目,是您在 Android 6 和 7 中看到的内容。如果您正在寻找一种列出私钥(用户凭据的内容)的方法,则没有 API。 -
@pedrofb,不,我没有误解,例如在 Android 6 中,当我安装我的证书和私钥时,它转到
Settings ---> Security-->Trusted credentials(Users tab),但在 Android 7 中,它转到不受信任的Settings --> Security-->User credentials。我的问题是我如何知道在 Android 7 中我的证书安装在Settings-->Security-->User credential中?我的证书不能从 AndroidCAStore 中列出,我已经尝试过了。 AndroidCAStore 仅列出受信任的条目。 -
我已经用真实的证书 6 和 7 检查了它。在 android 6 中,中间证书和根 CA 安装在 AndroidCAStore(不是叶子)中,但在 android 7 中,它没有。可以看到
Settings-->Security-->User credential中安装了证书,但是AndroidCAStore中没有安装根CA。您必须手动安装它。我已经从.pfx导出公共证书为.cer并安装,然后显示
标签: android ssl pkcs#12 android-7.0-nougat android-7.1-nougat