2008-09-23 17 views
16

Tengo un certificado raíz autofirmado con solo la extensión de firma de código (sin otras extensiones) en mi llavero Mac; Lo uso para firmar todo el código que sale de ∞labs usando la herramienta de señalización de Apple y funciona muy bien.¿Cómo firmo un applet de Java usando un certificado en mi llavero Mac?

Estaba buscando expandirme un poco y hacer un poco de desarrollo Java. Sé que Apple proporciona una implementación de KeyStore que lee desde el llavero, y puedo enumerar todos los certificados que tengo en la 'cadena con:

keytool -list -provider com.apple.crypto.provider.Apple -storetype KeychainStore -keystore NONE -v 

Sin embargo, cada vez que intento utilizar jarsigner para firmar un archivo JAR prueba simple, Termino con:

$ jarsigner -keystore NONE -storetype KeychainStore -providerName Apple a.jar infinitelabs_codesigning_2 
Enter Passphrase for keystore: <omitted> 
jarsigner: Certificate chain not found for: infinitelabs_codesigning_2. infinitelabs_codesigning_2 must reference a valid KeyStore key entry containing a private key and corresponding public key certificate chain. 

¿Qué estoy haciendo mal?

(El certificado se creó tras Apple's instructions for obtaining a signing identity.)

Respuesta

1

creo que su almacén de claves de entrada de alias debe estar mal. ¿Está utilizando el nombre de alias de un objeto de almacén de claves con un tipo de entrada de "keyEntry"? El mismo comando funciona perfectamente para mí.

Desde la página del jarsigner:

Al utilizar jarsigner para firmar un archivo JAR, debe especificar el alias para la entrada del almacén de claves que contiene la clave privada necesaria para generar la firma.

+0

El alias de la entrada del almacén de claves es correcto, si es el que muestra el primer comando keytool -list y no es algo más de lo que no tengo conocimiento. – millenomi

0

¿Ha intentado exportar la clave del llavero de apple e importarlo a través de la herramienta de claves? Tal vez Apple no ha integrado correctamente keytool con su llavero (no como si tuvieran un historial estelar con soporte de Java).

Editar:

Hmm ... Me acaba de intentar tomar una llave que trabajaba en la tienda de Java que importé en el llavero de la manzana (tiene una clave privada/pública) y no funciona. Así que si mi importación es incorrecta, no puede acceder al Apple Keychain de esta manera, o si algo está yendo mal :-)

0

He intentado hacer esto también. Pasé por algunas contorsiones y, usando Keystore Explorer y I lost my public key. Can I recover it from a private key?, pude extraer el certificado, la clave privada y la clave pública del archivo .keystore y moverlos a un llavero OSX. Tenga en cuenta que en este caso probablemente no necesité la clave pública.

Si le doy a jarsigner el nombre de la clave privada (a diferencia del nombre de mi certificado autofirmado basado en esa clave), aparece el error que mencionaste.

Mi conjetura es, entonces, que su problema es una de las siguientes

  • su llavero contiene el certificado, pero no la clave privada
  • su llavero contiene la clave privada pero no el CERT
  • "infinitelabs_codesigning_2 "se refiere a la clave privada en lugar del certificado

Puedo usar su línea de comando jarsigner (¡gracias!) y obtener los resultados correctos, que verifiqué con ja rsigner -verify.

Cuestiones relacionadas