2012-05-31 4 views
7

Я пытаюсь создать хранилище ключей с помощью Keytool с моими алгоритмами.Keytool с пользовательскими алгоритмами

Я создал пользовательский java.security.provider с расширенными классами SignatureSPI, MessagedigestSPI и KeyPairGeneratorSPI и статически установил его.

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

keytool -alias something -genkeypair -keyalg GOST2001KeyPairGenerator -sigalg GOST2001Signature -providerclass ru.test.security.test_provider -storetype pkcs12 -keystore test_keystore 

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

GOST2001KeyPairGenerator initialize 
GOST2001KeyPairGenerator generateKeyPair 
GOST2001Signature engineInitSign 
keytool error: java.lang.RuntimeException: internal error! unrecognized algorithm name: GOST2001Signature 

Странно то, что алгоритм действительно начинает выполнять но называемый впоследствии непризнанным. Не могу понять, что происходит не так.

+0

Вы попробовали сначала запустить его с помощью простой Java-программы? Я не думаю, что ваш провайдер будет признан, если он не будет подписан Oracle. –

+0

сделал. 1. Я тестировал все свои классы, используя addProvider. 2. Затем я добавил его статически и просто назвал стандартные методы, используя экземпляры моих алгоритмов из java-программы еще раз. Все работает отлично, пока я не использую Keytool, вот и проблема. –

+0

Спасибо, можете ли вы отправить полную трассировку стека? Это [ссылка] (http://bouncy-castle.1462172.n4.nabble.com/Unable-to-create-GOST3410-keypair-with-keytool-td1463711.html) может указывать на некоторые плохие новости. –

ответ

1

Ну, сложно сказать, что происходит, не имея возможности взглянуть на прогресс, который делает программа в вашем алгоритме. Попробуйте отслеживать части вашей программы, которые действительно работают с отладочными сообщениями и т. Д., Чтобы вы знали, что работает, а что нет.

Если есть исключение RuntimeException, возможно, оно застревает в цикле. И если алгоритм GOST2001Signature является неузнаваемым шансом, там может быть проблема. Если это сработало, возможно, вы не инициализируете его во второй раз. Обычно, когда часть программы я писал один раз, но не второй раз, я забыл инициализировать что-то, заставляя ее изменить результат и т. Д.

Удачи. Надеюсь, мои предложения помогут.

1

Вот что я сделал:

  • Вам нужно будет сделать баночку вас заказ поставщика и классы он необходим.
  • Далее вам нужно поставить эту банку в: C: \ Program Files \ Java \ jre6 \ Lib \ внутр
  • Добавьте security.provider.7 = my.package.MyProvider к java.security (7 быть следующим int в порядке).
  • Используйте опцию -providerName MYPROVIDERNAME в командной строке инструмента командной строки
  • Если вы планируете использовать -providerClass, убедитесь, что используете полное имя, а не только имя класса.

Это должно сделать это ..

Если нет, то после коррекции параметров, вы все равно получите NoSuchProviderException (используя -providerName) или ClassNotFoundException (с использованием -providerClass), убедитесь, что вы используете правильную копию клавишного инструмента. То есть при выполнении укажите полный путь keytool, а не полагайтесь на свою переменную PATH. Убедитесь, что путь относится к JRE, в который был установлен ваш провайдер. Многие системы (например, мои) имеют несколько JRE/JDK.

Удачи.

+0

Награжден щедростью, не имея возможности проверить правильность, и, к сожалению, автор тоже не смог ответить вовремя. Однако, похоже, это разумный ответ. –

+0

Много thx, Это работало для меня, поэтому я надеюсь, что это поможет некоторым из вас. – Frank

+0

Исходная проблема заключалась в том, что keytool не смог распознать алгоритм во время выполнения. Это не имеет никакого отношения к провайдеру, как вы можете это понять. Я правильно установил провайдера, java подключил его и начал вызывать методы. В любом случае, хорошо, что ваш ответ помог кому-то. Вопрос для меня больше не актуальен, мне удалось создать контейнер PKCS № 12 через API OPENSSL. –

Смежные вопросы