Mel*_*lon 19 ssl android pkcs#12 android-7.0-nougat android-7.1-nougat
在Android 7 Nougat中,用户安装的证书转到"用户凭据"而不是"可信凭证"(由系统凭据和用户凭证组成).
我过去通过以下方式访问"受信任的凭据":
KeyStore keystore = KeyStore.getInstance("AndroidCAStore");
Run Code Online (Sandbox Code Playgroud)
通过上面的代码,我可以访问系统和用户可信凭证.
但现在,在Android 7中,用户安装的证书将转到一个名为"用户凭据"的单独位置Settings --> Security --> User credentials.
我的问题是如何以编程方式列出User credentialsAndroid 7 中的凭据?
为了在Android生态系统中提供更一致和更安全的体验,从Android Nougat开始,兼容设备仅信任AOSP中CAs维护的标准化系统.
以前,pre-installed CAs与系统捆绑在一起的设备可能因设备而异.如果某些设备不包含连接所需的CA以及潜在的安全问题(如果某些设备上包含不符合我们安全要求的CA),则可能会导致兼容性问题.
首先,确保您的CA需要包含在系统中.预安装的CA仅适用于符合我们安全要求的CA,因为它们会影响设备上大多数应用的安全连接.如果需要添加CA以连接到使用该CA的主机,则应自定义连接到这些主机的应用程序和服务.有关自定义受信任CA的详细信息.
在上面的链接中,您可以找到信任具有不同需求的自定义CA的所有必要信息
因此,基本上您需要添加安全配置文件并配置自定义CA(适用于Android 7.0(API级别24)及更高版本).
在您的manifest.xml中
<manifest ... >
<application android:networkSecurityConfig="@xml/network_security_config"
... >
...
</application>
</manifest>
Run Code Online (Sandbox Code Playgroud)
在 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>
Run Code Online (Sandbox Code Playgroud)
仅供参考: - 如果您运行的是您认为应包含在Android中的 CA,请先完成 Mozilla CA Inclusion Process,然后针对Android提交功能请求,以便将CA添加到标准化的系统CA集中.
让我知道任何进一步的帮助.
希望这会帮助你.保持编码!
除了更改如何配置 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 核心类中使用。无法实施列出用户凭据的解决方法