Ошибка "Неправильная версия хранилища ключей". Как я могу создать сертификат склада ключей версии =1?
У меня проблемы с использованием SSL, так как я получаю следующую ошибку, связанную с моим хранилищем ключей (самостоятельно созданную и самозаверяющую с использованием keytool per: http://developer.android.com/tools/publishing/app-signing.html):
08-14 20: 55: 23.044: W / System.err (5430): java.io.IOException: Неправильная версия хранилища ключей. 08-14 20:55:23.060: W/System.err(5430): в org.bouncycastle.jce.provider.JDKKeyStore.engineLoad(JDKKeyStore.java:812) ...
Ошибка, брошенная в JDKKeyStore.java
Класс возникает в следующем коде:
Цитата из JDKKeyStore.java:
if (version! = STORE_VERSION) {if (version! = 0) {throw new IOException ("Неправильная версия хранилища ключей."); }}Blockquote
В этом случае STORE_VERSION = 1, а моя версия =3 основана на чтении сведений о сертификате, хранящемся в хранилище ключей, которое я создал. Я не знаю, как создать хранилище ключей, содержащее сертификат версии = 1.
Я нашел этот ответ полезным: неправильная версия хранилища ключей при выполнении вызова https
однако он требует создания хранилища ключей, используя следующие параметры:
-стоп тип БКС
-provider org.bouncycastle.jce.provider.BouncyCastleProvider
-providerpath /path/to/bouncycastle.jar
Однако, когда я пытаюсь создать keytool (используя терминальное приложение на Mac), используя эти параметры:
keytool -genkeypair -v -alias androiddebugkey -keyalg RSA -keysize 2048 -действительность 10000 -keypass android -keystore /Users/djames/dropbox/bc146keystore/debug.keystore -storepass android -providerclass org.bouncycastle.jiderpidervider -rovrovrovrovrovrovrovrovrovrovrovrovrovrovrovrovrovrovrovrovrovrovrovrovrovrovrovastrovrovrovrovrovrovrovrovrovrovrovrovastrovrovrovrovrovrovrovrovrovastrovrovrovrovrovrovrovrovrovastrovrovrovrovrovrovrovrovrovrovrovrovrovrovrovrovrovrovrovstrovR.pider -iderprovrovstv_v_p_s_p_s_s_s_s_s_s_ru.dll) / Пользователи / djames / раздаточная / bc146keystore /
(где / Users / djames / dropbox / bc146keystore / - это путь к банке надувного замка: bcprov-jdk16-146.jar)
Я получаю следующую ошибку:
ошибка keytool: java.lang.RuntimeException: ошибка использования,?providerpath не является допустимой командой java.lang.RuntimeException: ошибка использования,?providerpath не является допустимой командой в sun.security.tools.KeyTool.parseArgs(KeyTool.java:375) в sun.security.tools.KeyTool.run(KeyTool.java:171) в sun.security.tools.KeyTool.main(KeyTool.java:166)
Я не понимаю, что это говорит мне. Если я использую: keytool -help, это говорит мне, что следующие опции являются допустимыми для опции -genkeypair:
-genkeypair [-v] [-защищено] [-alias ] [-keyalg ] [-keysize ] [-sigalg ] [-dname ] [-validity ] [-keypass ] [-keystore ] [-storepass ] [-storetype ] [-providername ] [-providerclass [-providerarg ]] ... [-providerpath ]
Но в Oracle docs java версии 6, которую я использую ( http://docs.oracle.com/javase/6/docs/technotes/tools/solaris/keytool.html)
это говорит мне, что это варианты:
-genkeypair {-alias alias} {-keyalg keyalg} {-keysize keysize} {-sigalg sigalg} [-dname 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"
...)
Когда я гуглю: keytool -providerpath
Я не получаю ничего полезного, чтобы решить это.
Я не уверен, как решить проблему с версией хранилища ключей, не решив проблему с ключом. Любые предложения приветствуются.
Джим
(Mac OSX 10.6.8 if relevant)
4 ответа
Я смог обойти эту проблему с помощью версии хранилища ключей. см.: ошибка keytool при создании хранилища ключей BKS: неверный указатель поставщика
Моя проблема заключалась в использовании версии надувного замка, которая была слишком новой. Я должен был использовать 146 - позже, и это дало мне эту ошибку.
Несовпадение версий относится к версии хранилища ключей, а не к версии сертификата (которая должна иметь значение 2 для сертификата v3 X.509).
Какую версию JDK вы использовали keytool
от? Вы указали полный путь к команде или использовали то, что было в вашем PATH
? Вы уверены, что используете хранилища ключей JKS, а не магазины JCEKS?
Чтобы завершить ответ Райана, поскольку мне пришлось покопаться, чтобы узнать, как сгенерировать BKS с Bouncy Castle 1.46, вы можете использовать Portecle для генерации BKS.
- Загрузить Boucycastle Provider 1.46
- Установите или распакуйте его.
- Замените bcprov.jar в вашем каталоге установки Portecle (пример:
C:\Program Files (x86)\Portecle\bcprov.jar
). Такое же наименование требуется. - Перезапустите Portecle и создайте доверенное хранилище BKS.
Это объясняется здесь.
Редактировать:
Начиная с Portecle 1.8, вы можете использовать тип BKS-V1 для создания хранилища доверенных сертификатов без замены bcprov.jar
,
Вы можете выбрать его после нажатия на New keystore
или измените тип через меню Tools -> Change KeyStore Type
,