在Android 7 Nougat中,用户安装的证书会转到"用户凭据"而不是"可信凭证"(包括系统凭证和用户凭证)。
我过去常常访问"受信任的凭据"由:
KeyStore keystore = KeyStore.getInstance("AndroidCAStore");
通过上面的代码我可以访问系统&用户信任的凭据。
但是现在,在Android 7中,用户安装的证书会转到一个名为“#34;用户凭据”的单独位置。在Settings --> Security --> User credentials
下。
我的问题是如何以编程方式列出Android 7中User credentials
内的凭据?
答案 0 :(得分:7)
为了在Android生态系统中提供更一致,更安全的体验,从Android Nougat开始,兼容设备只信任AOSP中维护的标准化系统CAs
。
以前,与系统捆绑在一起的pre-installed CAs
集可能因设备而异。如果某些设备未包含 CA 连接所需的应用程序以及潜在的安全问题,如果 CA 不符合我们的安全要求,则可能导致兼容性问题一些设备。
首先,确保您的CA需要包含在系统中。该 预安装的CA仅适用于符合我们安全要求的CA. 因为它们会影响设备上大多数应用的安全连接。 如果需要添加CA以连接到使用该CA的主机,则可以 应该改为定制连接到那些应用和服务的应用和服务 主机。有关Customizing trusted CAs的更多信息。
在上面link中,您可以找到信任具有不同需求的自定义CA的所有必要信息,例如
因此,基本上您需要添加Security Configuration File和Configure a custom CA(适用于Android 7.0(API级别24)及更高版本)。
在 manifest.xml
中<manifest ... >
<application android:networkSecurityConfig="@xml/network_security_config"
... >
...
</application>
</manifest>
在 res / xml / network_security_config.xml中:
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<domain-config>
<domain includeSubdomains="true">example.com</domain>
<trust-anchors>
<certificates src="@raw/my_ca"/>
</trust-anchors>
</domain-config>
</network-security-config>
仅供参考: - 如果您运行的是您认为应包含在Android中的CA,请首先完成Mozilla CA Inclusion Process,然后针对Android提交feature request以将CA添加到标准化的系统CA集中。
让我知道任何进一步的帮助。
希望这会对你有所帮助。保持编码!!!
答案 1 :(得分:4)
除了更改如何配置Ca(@Pravin D答案)之外,Android还改变了pkcs12证书从6加载到7的方式。我强调了重要元素:
导入pkcs12时,导入的根CA是否受信任?
我在哪里可以看到受信任的凭据?
Settings ---> Security-->Trusted credentials
(系统和用户)Settings ---> Security-->Trusted credentials
(系统和用户标签)如何安装用户凭据?
我在哪里可以看到用户凭据(私钥)?
Settings-->Security-->User credentials
是否可以通过编程方式列出用户凭据?
深入回顾Android代码,内部Android Keystore被隐藏,只能在Android核心类中使用。无法实现列出用户凭据的变通方法