2012-03-30 3 views
1

Прошу прощения за смешение понятий, но мои знания об асимметричной защите веб-сервисов неглубокие.Генерация открытого ключа

Правильно, у меня есть хранилище ключей Java, содержащее мой закрытый ключ и открытый ключ клиентов.

При вызове клиентов веб-сервиса, я получаю сообщение об ошибке в ответ, говоря:

«Подпись или дешифрования является недействительным».

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

Что бы я хотел сделать, это восстановить открытый ключ на основе моего личного ключа в хранилище ключей и снова отправить его клиенту. Можно ли это сделать?

Чтобы быть честным, это именно то, что я сделал с помощью инструкции keytool. Результат, файл с расширением .cer. Является ли файл с .cer открытым ключом или что?

Любые советы приветствуются.

решаемые его:

Выше я сказал, что я пытался регенерировать открытый ключ из хранилища ключей, но я не был уверен, что это правильный способ сделать это.

Во всяком случае, я предоставил г-ну Клиенту этот новый открытый ключ и попросил их установить его на свой сервер. Это сработало, у нас есть соответствующие ключи. Я использовал следующую Keytool команды, чтобы восстановить открытый ключ:

Keytool -export -alias [имя секретного ключа в хранилище ключей] -file [путь к выходу] -keystore [путь к .jks] хранилищу

+0

Пожалуйста, напишите инструкцию keytool, чтобы мы могли проверить ее правильность. –

+0

@owlstead Грустно сказать, я не помню заявление keytool. Когда я вернусь в офис в понедельник, я предоставил его. – Daniel

ответ

0

Обычно у вас есть закрытый ключ вместе с сертификатом (цепочкой) в хранилище ключей. Если вы просто извлекаете первый сертификат из цепочки с тем же псевдонимом, что и закрытый ключ, у вас должен быть правильный сертификат.

Это не мешает проверить это, подписав некоторые произвольные данные с помощью закрытого ключа и, конечно же, проверив его с помощью открытого ключа из ceritificate. Signature.initVerify() должен даже принять сертификат напрямую. В противном случае вы можете сравнить (hash over) модуль открытого и закрытого ключей.

+0

Цепочка сертификатов, что это? Являются ли сертификаты и ключи одинаковыми? – Daniel

+0

Цепочка сертификатов - это все сертификаты, которые могут быть проверены друг другом, вплоть до корневого сертификата, который обычно является самоподписанным и доверенным. Корневым сертификатам доверяют другие средства, например. по расписанию в вашем любимом браузере. Сертификаты содержат открытый ключ пары открытый/закрытый ключ. Java KeyStores в основном используются для хранения двух видов записей: закрытых ключей пользователя хранилища ключей и их (частичной) цепочки сертификатов, а также явно доверенных записей сертификатов. Читайте на PKI, вам не хватает знаний! –

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