Android 列出存储在用户凭据中的证书
在安卓7 Nougat中,用户安装的证书转到“用户凭据”而不是“可信凭据”(由系统凭据和用户凭据组成) 我过去通过以下方式访问“受信任的凭据”: 通过上面的代码,我可以访问系统和用户受信任的凭据 但现在,在安卓7中,用户安装的证书会转到Android 列出存储在用户凭据中的证书,android,ssl,pkcs#12,android-7.0-nougat,android-7.1-nougat,Android,Ssl,Pkcs#12,Android 7.0 Nougat,Android 7.1 Nougat,在安卓7 Nougat中,用户安装的证书转到“用户凭据”而不是“可信凭据”(由系统凭据和用户凭据组成) 我过去通过以下方式访问“受信任的凭据”: 通过上面的代码,我可以访问系统和用户受信任的凭据 但现在,在安卓7中,用户安装的证书会转到Settings-->Security-->user credentials下一个名为“user credentials”的单独位置 我的问题是如何在Android 7中以编程方式列出用户凭据中的凭据?以在整个Android生态系统中提供更一致和更安全的体验,从A
Settings-->Security-->user credentials
下一个名为“user credentials”的单独位置
我的问题是如何在Android 7中以编程方式列出
用户凭据中的凭据?以在整个Android生态系统中提供更一致和更安全的体验,从Android Nougat开始,兼容设备只信任在中维护的标准化系统CAs
以前,与系统捆绑在一起的预装CAs的设置可能因设备而异。当某些设备未包含连接所需的应用程序时,这可能会导致兼容性问题,如果某些设备上包含不符合我们安全要求的应用程序,则可能会导致潜在的安全问题
首先,确保您的CA需要包含在系统中。这个
预安装的CA仅适用于满足我们安全要求的CA
因为它们会影响设备上大多数应用程序的安全连接。
如果需要添加CA以连接到使用该CA的主机,则可以
相反,您应该自定义连接到这些应用程序和服务的应用程序和服务
主持人。有关的详细信息
在上面,您可以找到信任具有不同需求的自定义CA所需的所有信息,如
信任自定义CA进行调试
信任域的自定义CA
信任用户为某些域添加了CA
信任用户为所有域(某些域除外)添加了CA
信任用户为所有安全连接添加了CA
因此,基本上您需要添加and(对于Android 7.0(API级别24)及更高版本)
在manifest.xml中
<manifest ... >
<application android:networkSecurityConfig="@xml/network_security_config"
... >
...
</application>
</manifest>
然后针对Android提交一份文件,将CA添加到标准化的系统CA集合中
让我知道任何进一步的帮助
希望这对你有帮助。继续编码 除了更改Ca的配置方式(@Pravin D answer),Android还将pkcs12证书的加载方式从6更改为7。我要强调以下重要内容:
导入pkcs12时,根CA是否作为受信任导入?
- 安卓6:是的
- 安卓7:没有
在哪里可以看到受信任的凭据?
- 安卓6:
设置-->安全-->可信凭证
(系统和用户)
- 安卓7:
设置-->安全-->可信凭证
(系统和用户选项卡)
如何安装用户凭据?
- Android 6:pkcs#12文件,证书文件,编程方式
- Android 7:pkcs#12文件(无私钥)、证书文件、编程、自定义CA配置(@Pravin D answer)
在哪里可以看到用户凭据(私钥)?
- Android 6:无法从设置中获得
- Android 7:
设置-->安全-->用户凭据
是否可以通过编程方式列出用户凭据?
- 安卓6:没有
- 安卓7:没有
深入查看Android代码,内部Android密钥库被故意隐藏,只能从Android核心类使用。无法实施列出用户凭据的变通方法来读取文档。如果通过配置,我假设应用程序可以隐式访问用户证书(对于AP23及以下版本的应用程序,这是自动完成的)。我没有读到任何可以显式访问用户凭据存储的内容。我在
中添加了
,但是,我的应用程序仍然不信任位于“用户凭据”下的证书。我想你可能误解了设置-->安全-->用户凭据。它显示用户安装的证书和私钥,而不是受信任的证书。Android6可以管理用户证书,但您无法在设置中看到它们,只能在根CA中看到它们。安装PKCS#12时,密钥链中可以访问私钥,并且根CA可以作为用户信任的凭据安装在AndroidCAStore
中。AndroidCAStore包含用户和系统条目,这是您在Android 6和7中看到的。如果您正在寻找列出私钥(用户凭据的内容)的方法,则没有API。@pedrofb,不,我没有误解,例如,在Android 6中,当我安装证书和私钥时,它转到设置-->安全-->受信任的凭据(用户选项卡)
,但在Android 7中,它转到不受信任的设置-->安全-->用户凭据。我的问题是,我如何知道在Android 7中,我的证书安装在设置-->安全-->用户凭据中?我的证书不能从AndroidCAStore中列出,我已经试过了。AndroidCAStore只列出受信任的条目。我已经用6和7个真实的证书进行了检查。在Android6中,中间证书和根CA安装在AndroidCAStore中(不是叶子),但在Android7中,它没有安装。您可以在设置-->安全-->用户凭据中看到安装的证书,但根CA未安装在AndroidCAStore
中。您必须手动安装它。我已将公共证书从.pfx
导出为.cer
,并已安装,然后显示以下问题:1。对于我的应用程序,我需要安装自己的根证书以信任Android 7中的存储。你是说Mozilla CA包含过程是获得根证书的必经之路吗
<manifest ... >
<application android:networkSecurityConfig="@xml/network_security_config"
... >
...
</application>
</manifest>
<?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>