2010-12-14 13 views
12

Sto tentando di accedere al mio archivio di portachiavi personale MacOS X per recuperare chiavi private specifiche per crittografare e firmare alcuni dati utilizzando Java. Le parti di crittografia e firma sono funzionali, ma non riesco a recuperare le chiavi private che desidero. Quanto segue è un codice che ho scritto di presentare il problema che ho:Ottieni chiave privata dal keystore MacOS X utilizzando 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()); 
    } 
} 

Dopo l'esecuzione quel pezzo di codice, ho potuto vedere tutti i certificati nel mio archivio chiavi personali. Tuttavia, posso recuperare solo una chiave privata, anche se ce ne sono un sacco nel keystore. (L'uscita del codice appena mostra più certificati attendibili + una chiave privata solo)

E quando rimuovo la chiave privata dall'archivio di chiavi ed eseguire il codice di nuovo, un'altra chiave privata viene restituito, mentre tutti gli altri rimangono inaccessibili. Importando nuovamente la chiave privata nel keystore ed eseguendo il codice un'ultima volta, questa viene restituita da Java e l'ultima chiave privata precedentemente restituita diventa inaccessibile.

Mi sono imbattuto in una mailing list su questo argomento: http://lists.apple.com/archives/java-dev/2007/aug/msg00134.html. Sfortunatamente, non sembra che il problema sia stato risolto e non riesco a contattare le persone coinvolte (nessun indirizzo e-mail).

Qualcuno ha provato a recuperare più chiavi private dall'archivio portachiavi MacOS e ci è riuscito?

La mia configurazione:

  • MacOS X 10.6
  • Jva JRE 1.6.0_15 (32 e 64 bit)
  • Safari 4.0.3
  • Firefox 3.6.3

Grazie in anticipo,

+0

Hai provato a utilizzare il keytool dalla riga di comando? se funzionerà, potrebbe essere una soluzione al tuo problema. L'ho usato in passato e ha funzionato per me ... –

risposta

2

Sfortunatamente questo è un limite noto l'implementazione di KeyChain KeyStore di Apple. C'è un ticket aperto nel bug tracker della porta MacOSX di OpenJDK (MACOSX_PORT-464) e una patch è stata inviata.

Tuttavia entrambi si dovrà ricompilare OpenJDK da zero (ci vuole un po ', ma si tratta di una procedura semplice) oppure si dovrà estrarre il Provider portachiavi servizio di crittografia da fonti OpenJDK e costruire un nuovo barattolo contenente il provider JCA standalone (ma dal momento che contiene codice nativo è probabilmente un compito molto più complesso).

Problemi correlati