Ошибка keytool при создании хранилища ключей BKS: неверный указатель поставщика

Я пытаюсь создать хранилище ключей "bks", используя keytool (используя терминальное приложение в Mac OS X). Я следую инструкциям в:
Ошибка keytool: java.security.KeyStoreException: BKS не найден

Это мое использование:

keytool -genkeypair -v -alias androiddebugkey -keyalg RSA -keysize 2048 -validity 10000 -keypass android -keystore /Users/djames/dropbox/bc146keystore/debug.keystore -storepass android -storetype BKS -providerclass org.bouncycastle.jce.provider.BouncyCastleProvider –providerpath /Users/djames/dropbox/bc146keystore/bcprov-jdk16-146.jar -dname "CN=Android Debug, OU=Android, O=Android, L=Whitefish, S=MT, C=US"

Я получаю следующую ошибку:

keytool error: java.lang.RuntimeException: Usage error, ?providerpath is not a legal command
java.lang.RuntimeException: Usage error, ?providerpath is not a legal command
    at sun.security.tools.KeyTool.parseArgs(KeyTool.java:375)

Я видел -provider path вариант рекомендуется в бесчисленных веб-сообщениях (в том числе выше) и при запуске keytool -help это подтверждает, что синтаксис допустим:

keytool usage:  ...   
-genkeypair  [-v] [-protected]
         [-alias <alias>]
         [-keyalg <keyalg>] [-keysize <keysize>]
         [-sigalg <sigalg>] [-dname <dname>]
         [-validity <valDays>] [-keypass <keypass>]
         [-keystore <keystore>] [-storepass <storepass>]
         [-storetype <storetype>] [-providername <name>]
         [-providerclass <provider_class_name> [-providerarg <arg>]] ...
         [-providerpath <pathlist>]

Я также попробовал следующую альтернативу (согласно http://docs.oracle.com/javase/6/docs/technotes/guides/security/crypto/CryptoSpec.html):

  1. удаляя -providerpath вариант keytool команда,
  2. размещение bcprov-jdk16-146.jar внутри {$JAVA_HOME/lib/ext} папка
  3. добавление security.provider.3=org.bouncycastle.jce.provider.BouncyCastleProvider в файл java.security.

Но все равно не получилось.

Любые идеи о том, что я могу сделать по-другому, чтобы преуспеть в создании хранилища ключей BKS?

3 ответа

Решение

Я никогда не был в состоянии преуспеть с Keytool. Вот что я сделал для решения проблемы: я сделал копию стандартного debug.keytool (хранилища ключей типа JKS), который был создан Eclipse (Indigo, SR2) автоматически при первом запуске программы Android в Eclipse, и использовал Portecle (http://portecle.sourceforge.net/), чтобы преобразовать его в хранилище ключей типа BKS. Теперь это сложная часть: если я теперь использую BKS-версию debug.keytool вместо оригинала, я получаю "ошибку упаковки Android" в Eclipse "java.io.IOException: неверный формат хранилища ключей" всякий раз, когда я пытаюсь Запустите программу Android. Однако, если я оставлю исходную версию JKS файла debug.keytool в каталоге по умолчанию, в котором его создал Eclipse, то я могу использовать версию BKS файла debug.keytool в подпапке /resources/raw программы Android, а Android открыть и распознать Это. Джим

С тех пор прошло много лет, но я тоже пытаюсь это сделать.

Ответ в том, что у вас есть параметры в неправильном порядке. Параметр -providerpath должен быть указан перед параметром -providerclass.

Я надеюсь, что это поможет кому-то в будущем искать решение.

Я пытаюсь установить SSL-соединение с сертификатами, поэтому для поддержки в Android мне нужно использовать файлы jks / bks в качестве хранилища доверия.

Таким образом, сгенерированный файл jks пытался в соединении SSLSocket Android, но выдает исключение, которое jks не может прочитать. Поэтому мне нужно добавить поставщика Boncycastle в JVM и создать bks с помощью файла jks

Загрузите файл jar провайдера Bouncycastle и поместите его по указанному ниже пути:

C:\Program Files\Java\jre1.8.0_191\lib\ext

Обновите файл java.security, добавив поставщика для следующего файла

C:\Program Files\Java\jre1.8.0_191\lib\security\java.security

Добавить провайдера

security.provider.12=org.bouncycastle.jce.provider.BouncyCastleProvider

Закройте командную строку и откройте команду выполнения, чтобы получить файл bks, как показано ниже:

keytool -importkeystore -srckeystore <input>.jks -destkeystore <required_bks_file_name>.bks -srcstoretype JKS -deststoretype BKS -srcstorepass <jsk file password> -deststorepass <jsk file password> -provider org.bouncycastle.jce.provider.BouncyCastleProvider

Теперь вы можете поместить файл bks в свою папку.

Спасибо

Простая альтернатива - использовать Portecle для генерации BKS:

  1. Загрузите необходимый провайдер Boucycastle
  2. Замените bcprov.jar в вашем каталоге установки Portecle (пример: C:\Program Files (x86)\Portecle\bcprov.jar). Такое же наименование требуется.
  3. Перезапустите Portecle и создайте доверенное хранилище BKS.

Больше объяснений здесь.

Другие вопросы по тегам