2008-09-23 9 views
16

У меня есть самозаверяющий корневой сертификат с расширением подписи кода (никаких других расширений) в моей ключевой цепочке Mac; Я использую его, чтобы подписать весь код, выходящий из ∞labs, с помощью инструментария кодов Apple, и он отлично работает.Как подписать апплет Java с помощью сертификата в моем ключевом ключе Mac?

Я искал, чтобы немного расширить себя и сделать некоторые разработки Java. Я знаю, что Apple, обеспечивает реализацию KeyStore, которая считывает из связки ключей, и я могу перечислить все сертификаты, которые я имею в «цепи с:

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

Однако всякий раз, когда я пытаюсь использовать Jarsigner подписать простой тестовый файл JAR, Я получаю:

$ 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. 

Что я делаю неправильно?

(Сертификат был создан после Apple's instructions for obtaining a signing identity.)

ответ

1

Я думаю, что ваша запись хранилища ключей псевдоним должен быть неправильным. Вы используете псевдоним имени объекта хранилища ключей с типом записи «keyEntry»? Эта же команда отлично работает для меня.

На странице Jarsigner человек:

При использовании Jarsigner подписать файл JAR, необходимо указать псевдоним для записи хранилища ключей, содержащий закрытый ключ, необходимый для создания подписи.

+0

Псевдоним входа в хранилище ключей прав, если это тот, который отображается первой командой keytool -list, а не что-то еще, о чем я не знаю. – millenomi 2008-09-27 09:23:01

0

Вы пытались экспортировать ключ из яблочного брелка и импортировать его через keytool? Возможно, Apple не имеет должным образом интегрированного keytool с их брелками (не так, как будто у них есть звездная запись с поддержкой Java).

Edit:

Хм ... Я просто попытался взять ключ, который работал с Java магазин, который я импортирован в яблочном брелка (имеется частный/открытый ключ) и он не работает. Так что эфир, мой импорт неправильный, вы не можете получить доступ к яблочному Keychain таким образом или что-то еще не так :-)

0

Я тоже пытался это сделать. Я прошел несколько искажений и, используя Keystore Explorer и I lost my public key. Can I recover it from a private key?, мне удалось извлечь сертификат, закрытый ключ и открытый ключ из файла .keystore и переместить их в цепочку ключей OSX. Обратите внимание, что в этом случае мне, вероятно, не нужен открытый ключ.

Если я даю jarsigner имя закрытого ключа (в отличие от имени моего самозаверяющего сертификата на основе этого ключа), я получаю указанную вами ошибку.

Мое предположение то, что ваша проблема одна из следующих

  • Ваш брелок содержит сертификат, но не закрытый ключ
  • Ваш брелок содержит закрытый ключ, но не серт
  • «infinitelabs_codesigning_2 "относится к закрытому ключу, а не к сертификату

Я могу использовать вашу командную строку jarsigner (спасибо!) и получить правильные результаты, которые я проверил с помощью ja rsigner -verify.