web-dev-qa-db-fra.com

répertorier le certificat stocké dans les informations d'identification de l'utilisateur

Dans Android 7 Nougat, le certificat installé par l'utilisateur est attribué à "Informations d'identification utilisateur" au lieu de "Informations d'identification fiables" (qui se compose d'informations d'identification système et d'informations d'identification utilisateur).

J'avais l'habitude d'accéder aux "informations d'identification de confiance" en:

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

grâce au code ci-dessus, je peux ensuite accéder aux informations d'identification de confiance du système et des utilisateurs.

Mais maintenant, dans Android 7, le certificat installé par l'utilisateur va dans un endroit séparé appelé "Informations d'identification de l'utilisateur" sous Settings --> Security --> User credentials.

Ma question est de savoir comment puis-je répertorier par programme les informations d'identification dans User credentials in Android 7?

19
Mellon

Pour fournir une expérience plus cohérente et plus sécurisée à travers l'écosystème Android, en commençant par Android Nougat, les appareils compatibles ne font confiance qu'au système normalisé CAs maintenu dans AOSP .

Auparavant, l'ensemble de pre-installed CAs fourni avec le système peut varier d'un appareil à l'autre. Cela pourrait entraîner des problèmes de compatibilité lorsque certains appareils n'incluaient pas les autorités de certification dont les applications avaient besoin pour les connexions ainsi que des problèmes de sécurité potentiels si Les autorités de certification qui ne répondaient pas à nos exigences de sécurité ont été incluses sur certains appareils.

Tout d'abord, assurez-vous que votre autorité de certification doit être incluse dans le système. Les autorités de certification préinstallées sont uniquement destinées aux autorités de certification qui répondent à nos exigences de sécurité, car elles affectent les connexions sécurisées de la plupart des applications sur l'appareil. Si vous devez ajouter une autorité de certification pour vous connecter aux hôtes qui utilisent cette autorité de certification, vous devez plutôt personnaliser vos applications et services qui se connectent à ces hôtes. Pour plus d'informations sur Personnalisation des AC de confiance .

Ci-dessus lien vous pouvez trouver toutes les informations nécessaires pour faire confiance aux autorités de certification personnalisées ayant des besoins différents, comme

  1. Faire confiance aux autorités de certification personnalisées pour le débogage
  2. Approbation des autorités de certification personnalisées pour un domaine
  3. Approbation des autorités de certification ajoutées par l'utilisateur pour certains domaines
  4. Faire confiance aux autorités de certification ajoutées par l'utilisateur pour tous les domaines, à l'exception de certains
  5. Faire confiance aux autorités de certification ajoutées par l'utilisateur pour toutes les connexions sécurisées

Donc, fondamentalement, vous devez ajouter un fichier de configuration de sécurité et configurer une autorité de certification personnalisée (pour Android 7.0 (API niveau 24) et supérieur) ).

Dans votre manifest.xml

<manifest ... >
    <application Android:networkSecurityConfig="@xml/network_security_config"
                    ... >
        ...
    </application>
</manifest>

Dans 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>

Juste pour information: - Si vous utilisez une autorité de certification qui devrait être incluse dans Android, remplissez d'abord le - Mozilla CA Inclusion Process puis déposez une demande de fonctionnalité contre Android pour que l'autorité de certification soit ajoutée à l'ensemble normalisé des autorités de certification du système.

Faites-moi savoir pour toute aide supplémentaire.

J'espère que ceci vous aidera. Continuez à coder !!!

7
Pravin Divraniya

En plus de changer la façon de configurer le Ca (réponse @Pravin D), Android a changé la façon dont un certificat pkcs12 est chargé de 6 à 7. Je souligne les éléments importants:

Lors de l'importation d'un pkcs12, l'autorité de certification racine est-elle importée comme approuvée?

  • Android 6: Oui
  • Android 7: non

Où puis-je voir les informations d'identification de confiance?

  • Android 6: Settings ---> Security-->Trusted credentials (système et utilisateur)
  • Android 7: Settings ---> Security-->Trusted credentials (onglet système et utilisateur)

Comment installer les informations d'identification de l'utilisateur?

  • Android 6: fichier pkcs # 12, fichier de certificat, par programme
  • Android 7: fichier pkcs # 12 (sans clés privées), fichier de certificat, par programme, configuration CA personnalisée (@ réponse Pravin D)

Où puis-je voir les informations d'identification de l'utilisateur (clés privées)?

  • Android 6: non disponible dans les paramètres
  • Android 7: Settings-->Security-->User credentials

Est-il possible de répertorier les informations d'identification de l'utilisateur par programme?

  • Android 6: non
  • Android 7: non

Examen approfondi du code Android, code interne Android Keystore est délibérément masqué, disponible uniquement à partir des classes de base Android Android. Il n'est pas possible d'implémenter une solution de contournement pour répertorier les informations d'identification de l'utilisateur

4
pedrofb