2010-12-14 18 views
12

Estoy intentando acceder a mi tienda personal de llaves MacOS X para recuperar claves privadas específicas para cifrar y firmar algunos datos utilizando Java. La parte de cifrado y firma son funcionales, pero no puedo recuperar las claves privadas que quiero. El siguiente es un código que he escrito para presentar el problema que tengo:Obtener clave privada de MacOS X keystore utilizando 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()); 
    } 
} 

Después de ejecutar ese trozo de código, pude ver todos los certificados en mi almacén de claves personales. Sin embargo, solo puedo recuperar una clave privada, aunque hay muchas en el almacén de claves. (el resultado del código solo muestra varios certificados de confianza + una clave privada solamente)

Y cuando elimino esa clave privada del almacén de claves y ejecuto ese código nuevamente, se devuelve otra clave privada, mientras que todas las demás permanecen inaccesibles. Al importar la clave privada de nuevo en el almacén de claves y ejecutarla por última vez, Java la devuelve y la última clave privada que se devolvió anteriormente se vuelve inaccesible.

Me he topado con una lista de correo sobre ese tema: http://lists.apple.com/archives/java-dev/2007/aug/msg00134.html. Lamentablemente, no parece que ese problema se haya resuelto, y no puedo contactar a las personas involucradas (no hay direcciones de correo electrónico).

¿Alguien ha tratado de recuperar varias claves privadas de la tienda de llaves MacOS, y ha tenido éxito?

Mi configuración:

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

Gracias de antemano,

+0

¿Ha intentado utilizar la herramienta de claves desde la línea de comandos? si funciona, podría solucionar su problema. Lo he usado en el pasado y funcionó para mí ... –

Respuesta

2

Desafortunadamente esta es una limitación conocida aplicación de Apple KeyChain KeyStore. Hay un ticket abierto en el rastreador de errores del puerto OpenJDK MacOSX (MACOSX_PORT-464) y se ha enviado un parche.

Sin embargo, deberá recompilar OpenJDK desde cero (lleva un tiempo pero es un procedimiento sencillo) o deberá extraer el proveedor de servicios de criptografía Keychain de las fuentes OpenJDK y crear un nuevo jar que contenga el proveedor JCA independiente (pero dado que contiene código nativo, es probablemente una tarea mucho más compleja).

Cuestiones relacionadas