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

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 中的凭据?

Pra*_*iya 7

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

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

首先,确保您的CA需要包含在系统中.预安装的CA仅适用于符合我们安全要求的CA,因为它们会影响设备上大多数应用的安全连接.如果需要添加CA以连接到使用该CA的主机,则应自定义连接到这些主机的应用程序和服务.有关自定义受信任CA的详细信息.

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

  1. 信任自定义CA以进行调试
  2. 信任域的自定义CA.
  3. 信任某些域的用户添加的CA.
  4. 信任除了某些域之外的所有域的用户添加的CA.
  5. 信任所有安全连接的用户添加的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集中.

让我知道任何进一步的帮助.

希望这会帮助你.保持编码!


ped*_*ofb 6

除了更改如何配置 Ca(@Pravin D 答案)之外,Android 还将 pkcs12 证书的加载方式从 6 更改为 7。我强调了重要的元素:

导入 pkcs12 时,根 CA 是否导入为受信任?

  • 安卓 6:是的
  • 安卓 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:无法从设置中使用
  • 安卓7:Settings-->Security-->User credentials

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

  • 安卓 6:否
  • 安卓 7:否

深入查看 Android 代码,内部 Android Keystore 被故意隐藏,只能在 Android 核心类中使用。无法实施列出用户凭据的解决方法