2010-12-14 4 views
12

J'essaie d'accéder à mon magasin de trousseaux MacOS X personnel pour récupérer des clés privées spécifiques pour crypter et signer des données en utilisant Java. La partie cryptage et signature est fonctionnelle, mais je ne peux pas récupérer les clés privées que je veux. Ce qui suit est un code que je l'ai écrit pour présenter la question que j'ai:Récupérer la clé privée du keystore MacOS X en utilisant Java

KeyStore myKeyStore; 
myKeyStore = KeyStore.getInstance("KeychainStore", "Apple"); 
myKeyStore.load(null, null); 

// Get all the aliases in a list (I thought that calling the KeyStore 
// methods during the iteration was the reason why getKey wasn't responding properly!) 
// ... it wasn't actually! 
ArrayList<String> aliases = new ArrayList<String>(); 
Enumeration<String> e = myKeyStore.aliases(); 
while (e.hasMoreElements()) { 
    aliases.add(e.nextElement()); 
} 

for (String alias : aliases) { 
    try { 
     // I read on the Internet that any ASCII password is required 
     // to get the getKey method working. 
     Key k = myKeyStore.getKey(alias, "TEST".toCharArray()); 
     if (k == null) { 
      System.out.println(alias + ": <null> (cannot retrieve the key)"); 
     } else { 
      System.out.println(alias + ":"); 
      System.out.println(k); 
     } 
    } catch (Exception ex) { 
     System.out.println(alias + ": " + ex.getMessage()); 
    } 
} 

Après l'exécution de ce morceau de code, je pouvais voir tous les certificats dans mon keystore personnel. Cependant, je ne peux récupérer qu'une seule clé privée, même s'il y en a beaucoup dans le keystore. (la sortie du code affiche uniquement plusieurs certificats de confiance + une clé privée uniquement)

Et lorsque je supprime cette clé privée du magasin de clés et que j'exécute à nouveau ce code, une autre clé privée est renvoyée alors que toutes les autres restent inaccessibles. En réimportant la clé privée dans le fichier de clés et en exécutant ce code une dernière fois, elle est renvoyée par Java et la dernière clé privée renvoyée précédemment devient inaccessible. Je suis tombé sur une liste de diffusion à ce sujet: http://lists.apple.com/archives/java-dev/2007/aug/msg00134.html. Malheureusement, il ne semble pas que ce problème ait été résolu, et je ne peux pas contacter les personnes concernées (pas d'adresses e-mail).

Est-ce que quelqu'un a essayé d'extraire plusieurs clés privées du magasin de trousseau de clés MacOS et a réussi?

Ma configuration:

  • Mac OS X 10.6
  • Jva 1.6.0_15 JRE (32 et 64bits)
  • Safari 4.0.3
  • Firefox 3.6.3

Merci à l'avance,

+0

Avez-vous essayé d'utiliser l'outil keytool à partir de la ligne de commande? Si cela fonctionne, cela peut être un problème pour votre problème. Je l'ai utilisé dans le passé et ça a marché pour moi ... –

Répondre

2

Malheureusement, ceci est une limite connue l'implémentation de KeyStore d'Apple KeyChain. Il y a un ticket ouvert dans le traqueur de bogues de port OpenJDK MacOSX (MACOSX_PORT-464) et un correctif a été soumis. Cependant, soit vous devrez recompiler OpenJDK à partir de rien (il faut un certain temps mais c'est une procédure simple) ou vous devrez extraire le fournisseur de services cryptographiques Keychain à partir de sources OpenJDK et créer un nouveau conteneur contenant le fournisseur JCA autonome (mais comme il contient du code natif, c'est probablement une tâche beaucoup plus complexe).

Questions connexes