Я использую 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.
Я искал в Интернете, но не смог найти ни одного действительного примера:
Примеры 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), но примеры, использующие некоторые инструменты, тоже будут полезны.
Спасибо!