Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 列出存储在用户凭据中的证书_Android_Ssl_Pkcs#12_Android 7.0 Nougat_Android 7.1 Nougat - Fatal编程技术网

Android 列出存储在用户凭据中的证书

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

在安卓7 Nougat中,用户安装的证书转到“用户凭据”而不是“可信凭据”(由系统凭据和用户凭据组成)

我过去通过以下方式访问“受信任的凭据”:

通过上面的代码,我可以访问系统和用户受信任的凭据

但现在,在安卓7中,用户安装的证书会转到
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>