Хранение ключей PGP (общедоступных) в хранилище ключей java — Bouncycastle

Я использую bouncycastle (JAVA) для подписания, шифрования, дешифрования и проверки подписей при реализации SSO. У меня есть необработанные открытые и закрытые ключи PGP, и мне нужно хранить их в хранилище ключей Java. Эти открытые ключи PGP не имеют сертификата.

Я понимаю, что для открытых ключей (согласно javadoc Keystore: http://docs.oracle.com/javase/6/docs/api/java/security/KeyStore.html) у меня есть для создания сертификата. После создания сертификата я могу импортировать его в хранилище ключей как KeyStore.TrustedCertificateEntry. Однако я не могу создать запись сертификата для типа org.bouncycastle.openpgp.PGPPublicKey.

Я искал в Интернете, но не смог найти ни одного действительного примера:

  1. Документация Bouncycastle: http://www.bouncycastle.org/wiki/display/JA1/X.509+Public+Key+ Сертификат+и+Сертификация+Запрос+Генерация Генерирует сертификат для ключей X.509 —
  2. Примеры Bouncycastle — org.bouncycastle.openpgp.examples.DirectKeySignature: Добавьте сертификат (объект типа PGPSignature) непосредственно в PGPPublicKey. В заключение: я подписал (сертифицирован) PGPPublicKey, но я не могу сохранить этот тип ключа в хранилище ключей Java.

    OutputStream out = new ByteArrayOutputStream();
    если (броня)
    {
    out = новый ArmoredOutputStream (out);
    }
    PPGPrivateKey pgpPrivKey = секретный ключ.извлечьPrivateKey(secretKeyPass.toCharArray(), "BC");
    PGPSignatureGenerator sGen = новый PGPSignatureGenerator(secretKey.getPublicKey().getAlgorithm(), PGPUtil.SHA1, "BC");
    sGen.initSign(PGPSignature.DIRECT_KEY, pgpPrivKey);
    BCPGOutputStream bOut = новый BCPGOutputStream(out);
    sGen.generateOnePassVersion(false).encode(bOut);
    PPGSignatureSubpacketGenerator spGen = new PPGSignatureSubpacketGenerator();
    логическое значение isHumanReadable = true;
    spGen.setNotationData(true, isHumanReadable, notationName, notationValue);
    PPGSignatureSubpacketVector packetVector = spGen.generate();
    sGen.setHashedSubpackets(packetVector);
    bOut.flush();
    вернуть PGPPublicKey.addCertification(keyToBeSigned, sGen.generate()).getEncoded();
    

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

Спасибо!

6
задан Juraj Martinka 5 April 2012 в 13:55
поделиться