2008-09-23 17 views
16

J'ai un certificat racine auto-signé avec juste l'extension de signature de code (pas d'autres extensions) dans mon trousseau de Mac; Je l'utilise pour signer tout le code sortant de ∞labs en utilisant l'outil de codesign d'Apple et ça marche très bien. Je cherchais à me développer un peu et à faire du développement Java. Je sais que Apple propose une implémentation KeyStore qui lit le porte-clés, et je peux énumérer tous les certificats que j'ai dans la « chaîne avec:Comment signer une applet Java à l'aide d'un certificat dans mon trousseau Mac?

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

Cependant, chaque fois que j'essaie d'utiliser jarsigner pour signer un fichier JAR de test simple, Je me retrouve avec:

$ 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'est-ce que je fais mal?

(Le certificat a été créé à la suite Apple's instructions for obtaining a signing identity.)

Répondre

1

Je pense que votre alias d'entrée keystore doit se tromper. Utilisez-vous le nom d'alias d'un objet keystore avec un type d'entrée "keyEntry"? La même commande fonctionne parfaitement pour moi.

Sur la page man jarsigner:

Lorsque vous utilisez jarsigner pour signer un fichier JAR, vous devez spécifier l'alias pour l'entrée keystore contenant la clé privée nécessaire pour générer la signature.

+0

L'alias d'entrée du magasin de clés a raison, si c'est celui affiché par la première commande keytool -list et pas autre chose que je ne connais pas. – millenomi

0

Avez-vous essayé d'exporter la clé à partir du trousseau de clés Apple et de l'importer via keytool? Peut-être que Apple n'a pas intégré keytool correctement avec leur trousseau (pas comme ils ont un track record stellaire avec Java).

Edit:

Hmm ... Je viens d'essayer de prendre une clé qui a travaillé dans le magasin java que j'importé dans le trousseau de pomme (a une clé privée/publique) et il ne fonctionne pas. Donc, mon importation est fausse, vous ne pouvez pas accéder à l'Apple Keychain de cette façon, ou quelque chose d'autre ne va pas :-)

0

J'ai essayé de faire cela aussi bien. J'ai traversé quelques contorsions et, en utilisant Keystore Explorer et I lost my public key. Can I recover it from a private key?, j'ai été en mesure d'extraire le certificat, la clé privée et la clé publique du fichier .keystore et de les déplacer dans un trousseau OSX. Notez que dans ce cas je n'ai probablement pas besoin de la clé publique.

Si je donne à jarsigner le nom de la clé privée (par opposition au nom de mon certificat auto-signé basé sur cette clé), alors j'obtiens l'erreur que vous avez mentionnée.

Je suppose alors que votre problème est une des façons suivantes

  • votre trousseau contient le cert, mais pas la clé privée
  • votre trousseau contient la clé privée, mais pas le cert
  • « infinitelabs_codesigning_2 "se réfère à la clé privée plutôt que le cert

Je suis en mesure d'utiliser votre ligne de commande jarsigner (merci!) et obtenir des résultats corrects, que j'ai vérifié avec ja rsigner -verify.