Задать вопрос
zencd
@zencd

Стоит ли хранить публичный ключ в хранилище X.509 для задачи верификации цифровой подписи?

Публичный и приватный RSA-ключи я генерирую при помощи консольной openssl:

# генерю приватный ключ
openssl genrsa -out my.pem 1024
# преобразую в pkcs8 чтобы прочитать из Джавы
openssl pkcs8 -topk8 -nocrypt -inform PEM -outform DER -in my.pem -out my.pk8
# выделяю публичный ключ
openssl rsa -in my.pem -pubout -out my.pub


Публичный ключ при этом получается в «контейнере» X.509. После отрезания хидера с футером, я его вполне успешно читаю:

def keySpec = new X509EncodedKeySpec (encodedKey);
def keyFactory = KeyFactory.getInstance("RSA");
return keyFactory.generatePublic(keySpec);


Это уместно, использовать для верификации публичный ключ в «контейнере» X.509? Или есть более подходящие решения? Ведь создавался он для сетевых нужд, с отзывом сертификатов и т.п…
  • Вопрос задан
  • 3251 просмотр
Подписаться 2 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 2
@SleepingLion
Почему нет?
Можно, конечно использовать DER, но это может быть не всегда удобно.
Зависит от того, что вы собираетесь с этим делать.
X.509 (а по сути PEM) можно безопасно передавать не сериализуя, если где нужно.
Если нужно хранить много ключей, то лучше DER, т.к. он меньше по размеру в разы за счёт бинарной записи. Некоторые алгоритмы обрабатывают DER быстрее т.к. им не нужно его преобразовывать, хотя на фоне самих криптоопераций это может быть мелочью.
Ответ написан
Комментировать
Maximus43
@Maximus43
Если у вас есть цель написать собственные процедуры подписи данных и проверки подписи, тогда вы сами решаете, в каком формате вам хранить ключи. PEM это BASE64. Можно спокойно передавать по сети.
Обычно из публичного ключа все-таки делают сертификат, хотя-бы самоподписанный. И далее включают в проект необходимые PKI библиотеки.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы