Подтвердить что ты не робот

Как подписать апплет Java с помощью сертификата в моем ключевом ключе Mac?

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

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

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 для получения идентификатора подписи.)

4b9b3361

Ответ 1

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

На странице man jarsigner:

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

Ответ 2

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

Edit:

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

Ответ 3

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

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

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

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

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