2010-12-14 9 views
12

Próbuję uzyskać dostęp do osobistego magazynu kluczy keych MacOS X, aby pobrać określone klucze prywatne do szyfrowania i podpisywania niektórych danych przy użyciu języka Java. Szyfrowanie i podpisywanie są funkcjonalne, ale nie mogę odzyskać kluczy prywatnych, które chcę. Poniżej zamieszczona jest jakiś kod ja napisałem przedstawić problem mam:Uzyskaj klucz prywatny z magazynu kluczy MacOS X przy użyciu Javy

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()); 
    } 
} 

Po wykonaniu tego fragmentu kodu, widziałem wszystkie certyfikaty w moim osobistym kluczy. Mogę jednak pobrać tylko jeden klucz prywatny, mimo że w magazynie kluczy znajduje się ich garść. (dane wyjściowe kodu pokazują tylko wiele zaufanych certyfikatów + tylko jeden klucz prywatny)

A kiedy usunę ten klucz prywatny z magazynu kluczy i ponownie wykonam ten kod, zwrócony zostanie inny klucz prywatny, podczas gdy pozostałe pozostaną niedostępne. Importując klucz prywatny z powrotem do magazynu kluczy i wykonując go po raz ostatni, zostaje zwrócony przez Javę, a ostatni klucz prywatny, który został wcześniej zwrócony, staje się nieosiągalny.

Natknąłem się na listę dyskusyjną na ten temat: http://lists.apple.com/archives/java-dev/2007/aug/msg00134.html. Niestety, nie wydaje się, że problem został rozwiązany i nie mogę skontaktować się z osobami zaangażowanymi (bez adresów e-mail).

Czy ktoś próbował pobrać wiele kluczy prywatnych ze sklepu pęku kluczy kluczy MacOS i czy udało się to?

Moja konfiguracja:

  • MacOS X 10.6
  • JVA JRE 1.6.0_15 (32 i 64bits)
  • Safari 4.0.3
  • Firefox 3.6.3

Dzięki wcześniej,

+0

Czy próbowałeś użyć keytool z linii poleceń? jeśli to zadziała - może to być praca nad twoim problemem. Używałem go w przeszłości i działało dla mnie ... –

Odpowiedz

2

Niestety jest to znane ograniczenie jon wdrożenia Apple KeyChain KeyStore. Jest otwarty bilet w monitorze błędów portu OpenJDK MacOSX (MACOSX_PORT-464), a łatka została przesłana.

Jednak albo będziesz musiał przekompilować OpenJDK od zera (zajmie to trochę czasu, ale jest to prosta procedura), albo będziesz musiał wyodrębnić dostawcę usług kryptograficznych Keychain ze źródeł OpenJDK i zbudować nowy słoik zawierający autonomicznego dostawcę JCA (ale ponieważ zawiera kod natywny, jest to prawdopodobnie znacznie bardziej złożone zadanie).

Powiązane problemy