Преобразование открытого ключа RSAP в X509Certificate (Java)

Вопрос: Можно ли прочитать пару ключей RSA из хранилища ключей Java, чтобы захватить идентичность субъекта открытого ключа из открытого ключа?

Я создал RSA с 2048-битным ключом SHA1 с помощью Java Keytool и сохранил пару ключей в файле JKS. Я могу загрузить ключ с помощью кода отсюда: https://stackoverflow.com/a/26711907/1203182, однако я Я получаю RSAPublicKey, а не X509Certificate. Открытый ключ RSA не имеет каких-либо методов для поиска идентификатора субъекта или DN из открытого ключа.

Есть ли способ преобразовать открытый ключ RSA или каким-то образом получить из него сертификат X509? А может я просто чего-то не понимаю.


person spy    schedule 11.04.2017    source источник


Ответы (2)


И, как обычно, я пришел к своему собственному ответу через несколько секунд после публикации этого сообщения. Поговорим о кодировании резиновой утки. Решение было довольно простым, я искал не в том месте. Фрагмент кода ниже ...

Key key = keystore.getKey(alias, "password".toCharArray());
if (key instanceof PrivateKey) {
  // Get certificate of public key
  Certificate cert = keystore.getCertificate(alias);

  //Answer > get the DN from 'cert.getSubjectDN()`

  // Get public key
  PublicKey publicKey = cert.getPublicKey();
  //publicKey is NOT where you can get the certificate DN....
person spy    schedule 11.04.2017

Я бы рекомендовал использовать Bouncy Castle при работе с шифрованием и дешифрованием на Java.

Вот кое-что, что может дать вам некоторую информацию (я думаю, он хочет делать то же, что и вы):

Прочитать открытый ключ из файла в хранилище ключей

Пример кода там выглядит так:

PEMParser pemParser = new PEMParser(new StringReader(certPEMData));
    Object parsedObj = pemParser.readObject();
    System.out.println("PemParser returned: " + parsedObj);
    if (parsedObj instanceof X509CertificateHolder)
    {
        X509CertificateHolder x509CertificateHolder = (X509CertificateHolder) parsedObj;
        return x509CertificateHolder.getSubjectPublicKeyInfo().getPublicKeyData().getString();
    }
    else
    {
        throw new RuntimeException("The parsed object was not an X509CertificateHolder.");
    }

И вот у вас есть веб-сайт библиотеки Bouncy Castle, на котором вы тоже можете найти некоторую информацию:

Надувной замок

А если вам лень, то вот ссылка на их новейшую версию. Включите этот JAR-файл в свой путь сборки, и вы можете просто скопировать и вставить приведенный выше код.

Прямая загрузка библиотеки Bouncy Castle

person Max    schedule 11.04.2017