Генерация открытого ключа

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

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

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

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

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

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

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

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

Решено:

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

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

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


person Daniel    schedule 30.03.2012    source источник
comment
Пожалуйста, опубликуйте оператор keytool, чтобы мы могли проверить его правильность.   -  person Maarten Bodewes    schedule 31.03.2012
comment
@owlstead К сожалению, я не помню оператора keytool. Когда я вернусь в офис в понедельник, я предоставлю его.   -  person Daniel    schedule 31.03.2012


Ответы (1)


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

Не помешает проверить это, подписав какие-то произвольные данные приватным ключом и, конечно же, сверив их публичным ключом из сертификата. Signature.initVerify() должен даже получить сертификат напрямую. В противном случае вы также можете сравнить (хэш над) модуль открытого и закрытого ключей.

person Maarten Bodewes    schedule 30.03.2012
comment
Цепочка сертификатов, что это? Являются ли сертификаты и ключи одним и тем же? - person Daniel; 31.03.2012
comment
Цепочка сертификатов — это все сертификаты, которые могут быть проверены друг другом, вплоть до корневого сертификата, который обычно является самоподписанным и доверенным. Корневым сертификатам доверяют другими способами, например. путем распространения в вашем любимом браузере. Сертификаты содержат открытый ключ пары открытый/закрытый ключ. Хранилища ключей Java в основном используются для хранения двух типов записей: закрытых ключей пользователя хранилища ключей и их (частичной) цепочки сертификатов, а также явно доверенных записей сертификатов. Почитайте про PKI, вам не хватает знаний! - person Maarten Bodewes; 31.03.2012