Публичный и приватный 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? Или есть более подходящие решения? Ведь создавался он для сетевых нужд, с отзывом сертификатов и т.п…