Как мне подписать Java-апплет с помощью сертификата в моей цепочке для ключей Mac? - PullRequest
16 голосов
/ 24 сентября 2008

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

Я хотел немного расширить себя и заняться разработкой 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 по получению подписи .)

Ответы [ 3 ]

1 голос
/ 26 сентября 2008

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

Со страницы руководства jarsigner:

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

0 голосов
/ 26 июля 2013

Я тоже пытался это сделать. Я прошел через несколько искажений и, используя Keystore Explorer и , потерял свой открытый ключ. Могу ли я восстановить его из закрытого ключа? , я смог извлечь сертификат, закрытый ключ и открытый ключ из файла .keystore и переместить их в цепочку ключей OSX. Обратите внимание, что в этом случае мне, вероятно, не нужен открытый ключ.

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

Полагаю, ваша проблема в следующем:

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

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

0 голосов
/ 28 февраля 2009

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

Edit:

Хм ... Я только что попытался взять ключ, который работал из хранилища java, которое я импортировал в цепочку для ключей яблока (имеет закрытый / открытый ключ), и он не работает. Поэтому мой импорт неверен, вы не можете получить доступ к цепочке ключей Apple таким образом, или что-то еще идет не так: -)

...