web-dev-qa-db-ja.com

ユーザーの資格情報に保存されている証明書を一覧表示する

Android 7 Nougatでは、ユーザーがインストールした証明書は、「信頼された資格情報」ではなく「ユーザー資格情報」に送られます(システム資格情報とユーザー資格情報で構成されます)。

以前は「信頼された資格情報」にアクセスしていた。

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

上記のコードを使用して、システムとユーザーの信頼できる認証情報にアクセスできます。

しかし今、Android 7では、ユーザーがインストールした証明書はSettings --> Security --> User credentialsの下の「ユーザー資格情報」と呼ばれる別の場所に移動します。

私の質問は、Android 7のUser credentials内の資格情報をプログラムで一覧表示するにはどうすればよいですか?

19
Mellon

Android Nougatから始まるAndroidエコシステム全体でより一貫したより安全なエクスペリエンスを提供するために、互換性のあるデバイスは、 [〜で維持される標準化されたシステムCAsのみを信頼します#〜] aosp [〜#〜]

以前は、システムにバンドルされているpre-installed CAsのセットはデバイスごとに異なる可能性がありました。これにより、一部のデバイスに、アプリが接続に必要な CAs を含まない場合の互換性の問題と、 CAs 一部のデバイスに含まれているセキュリティ要件を満たしていません。

まず、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>

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の包含を完了してくださいAndroidに対してプロセス を実行し、次に 機能リクエスト を提出して、標準化されたシステムCAのセットにCAを追加します。

さらにサポートが必要な場合はお知らせください。

これがお役に立てば幸いです。コーディングしてください!!!

7

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キーストアは意図的に非表示にされ、Androidコアクラスからのみ使用できます。ユーザー資格情報をリストする回避策を実装することはできません

4
pedrofb