Ошибка "неправильная версия хранилища ключей". Как создать сертификат хранилища ключей version=1?

у меня возникли проблемы с использованием SSL, так как я получаю следующую ошибку, связанную с моим хранилищем ключей (самостоятельно созданный и самозаверяющий с помощью keytool per:http://developer.android.com/tools/publishing/app-signing.html):

08-14 20:55:23.044: W / System.err (5430): java.Ио.IOException: Неправильно версия хранилища ключей. 08-14 20: 55: 23.060: W / System.err (5430): at орг.после установки BouncyCastle.око.поставщик.JDKKeyStore.engineLoad (JDKKeyStore.java: 812) ...

ошибка в JDKKeyStore.java класс возникает в следующем коде:

Blockquote Из JDKKeyStore.java:
if (версия != STORE_VERSION) { if (версия != 0) { throw new IOException ("неправильная версия хранилища ключей."); } }

Blockquote

в этом случае STORE_VERSION = 1, а моя версия=3 на основе чтения сведения о сертификате, хранящемся в хранилище ключей, которое я создал. Я не знаю, как создать хранилище ключей, содержащее сертификат version=1.

Я нашел этот ответ полезным: неправильное хранилище ключей версии при выполнении https-вызова

однако он требует создания хранилища ключей, используя следующие параметры:

-тип хранилища BKS
- организация провайдеров.после установки BouncyCastle.око.поставщик.BouncyCastleProvider
-providerpath / путь/к / bouncycastle.Джар

однако, когда я пытаюсь создать keytool (используя приложение терминала на Mac), используя следующие параметры:

keytool-genkeypair - V-псевдоним androiddebugkey-keyalg RSA-keysize 2048-валидность 10000-keypass android-хранилище ключей / Пользователи / djames/dropbox/bc146keystore / debug.keystore-storepass для android - организация providerclass.после установки BouncyCastle.око.поставщик.BouncyCastleProvider-providerpath / Пользователи / djames/dropbox/bc146keystore/

(где /Users/djames/dropbox/ bc146keystore / путь к надувному замку jar: bcprov-jdk16-146.jar)

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

ошибка keytool: java.ленг.К RuntimeException: ошибка использования ?providerpath не является законной командой java.ленг.RuntimeException: ошибка использования, ?providerpath не является законной командой на солнце.безопасность.инструменты.KeyTool.parseArgs (KeyTool.java: 375) на солнце.безопасность.инструменты.KeyTool.run (KeyTool.java: 171) at солнце.безопасность.инструменты.KeyTool.main (KeyTool.java: 166)

Я не понимаю, что это говорите мне. Если я использую: keytool-help, он сообщает мне, что следующие допустимые параметры для опции-genkeypair:

- genkeypair [- v] [- защищено] [-кличка ] [- keyalg ] [- размер ключа ] [- sigalg ] [- dname ] [действительность ] [-keypass ] [- keystore ] [-storepass ] [- тип хранилища ] [- providername ] [- providerclass [- providerarg]]... [-providerpath ]

но в Oracle docs java версии 6, которую я использую (http://docs.oracle.com/javase/6/docs/technotes/tools/solaris/keytool.html)
он говорит мне, что это варианты:

-genkeypair {-псевдоним псевдоним} {-keyalg keyalg} {-ключа ключа} {-sigalg sigalg} [-dname в вимя] [-keypass keypass] {- validity valDays} {- storetype storetype} {- keystore keystore} [- storepass storepass] {- providerClass provider_class_name {- providerArg provider_arg}} {- v} {- protected} {- Jjavaoption}

, который не включает в себя -providerpath option. Почему диссонанс? (Если я не использую опцию-providerpath, то я получаю неизвестное исключение класса при опции:"-providerclass org.bouncycastle.jce.provider.BouncyCastleProvider"...)

когда я google: keytool-providerpath
Я не получаю ничего полезного, чтобы решить эту проблему.

Я не уверен,как решить проблему с версией хранилища ключей без решения проблемы keytool. Любые предложения приветствуются.

Джим

(Mac OSX 10.6.8 if relevant)

4 ответов


моя проблема заключалась в использовании версии bouncy castle, которая была слишком новой. Мне пришлось использовать 146 - позже, и это дало мне эту ошибку.



несоответствие версии для версии хранилища ключей, а не для версии сертификата (которая должна иметь значение 2 для сертификата V3 X. 509).

какую версию JDK вы использовали keytool с? Вы указали полный путь к команде или использовали то, что было в вашем PATH? Вы уверены, что используете магазины ключей JKS, а не магазины JCEKS?


для того, чтобы завершить Райан ответ, как я должен был копать, чтобы узнать, как генерировать BKS с надувной замок 1.46, вы можете использовать Portecle для генерации BKS.

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

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


редактировать:

начиная с Portecle 1.8, вы можете использовать тип BKS-V1 для создания вашего truststore без замены bcprov.jar.

вы можете выбрать его после нажатия на New keystore или изменить тип через меню Tools -> Change KeyStore Type.