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

时间:2016-11-01 15:44:54

标签: android ssl pkcs#12 android-7.0-nougat android-7.1-nougat

在Android 7 Nougat中,用户安装的证书会转到"用户凭据"而不是"可信凭证"(包括系统凭证和用户凭证)。

我过去常常访问"受信任的凭据"由:

KeyStore keystore = KeyStore.getInstance("AndroidCAStore");

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

但是现在,在Android 7中,用户安装的证书会转到一个名为“#34;用户凭据”的单独位置。在Settings --> Security --> User credentials下。

我的问题是如何以编程方式列出Android 7中User credentials内的凭据?

2 个答案:

答案 0 :(得分:7)

为了在Android生态系统中提供更一致,更安全的体验,从Android Nougat开始,兼容设备只信任AOSP中维护的标准化系统CAs

以前,与系统捆绑在一起的pre-installed CAs集可能因设备而异。如果某些设备未包含 CA 连接所需的应用程序以及潜在的安全问题,如果 CA 不符合我们的安全要求,则可能导致兼容性问题一些设备。

  

首先,确保您的CA需要包含在系统中。该   预安装的CA仅适用于符合我们安全要求的CA.   因为它们会影响设备上大多数应用的安全连接。   如果需要添加CA以连接到使用该CA的主机,则可以   应该改为定制连接到那些应用和服务的应用和服务   主机。有关Customizing trusted CAs的更多信息。

在上面link中,您可以找到信任具有不同需求的自定义CA的所有必要信息,例如

  1. 信任自定义CA以进行调试
  2. 信任域的自定义CA
  3. 信任某些域的用户添加的CA
  4. 信任除某些
  5. 之外的所有域的用户添加的CA.
  6. 信任所有安全连接的用户添加的CA
  7. 因此,基本上您需要添加Security Configuration FileConfigure 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是否受信任?

  • Android 6:是
  • Android 7:否

我在哪里可以看到受信任的凭据?

  • Android 6:Settings ---> Security-->Trusted credentials(系统和用户)
  • Android 7:Settings ---> Security-->Trusted credentials(系统和用户标签)

如何安装用户凭据?

  • Android 6:pkcs#12文件,证书文件,以编程方式
  • Android 7:pkcs#12文件(没有私钥),证书文件,以编程方式,自定义CA配置(@ Pravin D回答)

我在哪里可以看到用户凭据(私钥)?

  • Android 6:设置无法使用
  • Android 7:Settings-->Security-->User credentials

是否可以通过编程方式列出用户凭据?

  • Android 6:否
  • Android 7:否

深入回顾Android代码,内部Android Keystore被隐藏,只能在Android核心类中使用。无法实现列出用户凭据的变通方法