25 votes

La chaîne est nulle lors de la récupération de la clé privée

Je suis le cryptage des données de mon application à l'aide d'une paire de clés RSA que je suis ranger dans le Android fichier de clés.

J'ai été voir, NullPointerExceptions dans le Play Store, mais je n'ai pas été en mesure de reproduire:

java.lang.NullPointerException: chain == null
    at java.security.KeyStore$PrivateKeyEntry.<init>(KeyStore.java:1205)
    at java.security.KeyStoreSpi.engineGetEntry(KeyStoreSpi.java:374)
    at java.security.KeyStore.getEntry(KeyStore.java:644)
    at MyClass.getKeyStoreEntry(MyClass.java:111)

Le code source pour créer la paire de clés

Calendar start = Calendar.getInstance();
start.setTimeInMillis(0);
Calendar end = Calendar.getInstance();
end.set(Calendar.YEAR, 3000);

KeyPairGeneratorSpec.Builder keySpecBuilder = new KeyPairGeneratorSpec.Builder(context)
    .setAlias(keyName)
    .setSubject(new X500Principal("CN=" + keyName))
    .setSerialNumber(BigInteger.TEN)
    .setStartDate(start.getTime())
    .setEndDate(end.getTime())
    .setKeySize(RSA_KEY_SIZE);

KeyPairGeneratorSpec spec = keySpecBuilder.build();
KeyPairGenerator gen = KeyPairGenerator.getInstance("RSA", "AndroidKeyStore");
gen.initialize(spec);
gen.generateKeyPair();

Et puis de récupérer la clé:

private KeyStore.PrivateKeyEntry getKeyStoreEntry() {
    KeyStore keyStore = KeyStore.getInstance(ANDROID_KEY_STORE);
    keyStore.load(null);

    if (!keyStore.containsAlias(keyName)) {
        throw new KeyNotFoundException();
    }
    return (KeyStore.PrivateKeyEntry) keyStore.getEntry(keyName, null);
}

C'est seulement quand j'use de l' KeyPairGeneratorSpec sur l'API de niveau 19-22. Le 23+ mise en œuvre fonctionne très bien.

Je ne dispose pas d'une clé avec le même nom et je n'ai pas supprimé la clé.

0voto

Marcin Orlowski Points 24633

Je crois que vous êtes tout simplement en face du magasin de clés de bugs. Voir cet article par exemple: Sécurité d'Android: La Oublieux de magasin de clés. Il y a aussi différentes les rapports de bug sur Android tracker liées à keystore, comme AndroidKeyStore supprimé après un changement de type de verrouillage d'écran.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X