Ошибка 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):
- удаляя
-providerpath
вариантkeytool
команда, - размещение
bcprov-jdk16-146.jar
внутри{$JAVA_HOME/lib/ext}
папка - добавление
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:
- Загрузите необходимый провайдер Boucycastle
- Замените bcprov.jar в вашем каталоге установки Portecle (пример:
C:\Program Files (x86)\Portecle\bcprov.jar
). Такое же наименование требуется. - Перезапустите Portecle и создайте доверенное хранилище BKS.
Больше объяснений здесь.