Ich verwende Bouncycastle (JAVA) zum Signieren, Verschlüsseln, Entschlüsseln und Signaturen Verifikation in der Umsetzung von SSO. Ich habe öffentliche und private PGP-Schlüssel und muss sie im Java-Keystore speichern. Diese öffentlichen PGP-Schlüssel haben kein Zertifikat.Store PGP (öffentliche) Schlüssel in Java Keystore - Bouncycastle
Ich verstehe, dass für öffentliche Schlüssel (nach Javadoc Keystore: http://docs.oracle.com/javase/6/docs/api/java/security/KeyStore.html) ich Zertifikat erstellen muss. Sobald das Zertifikat erstellt wurde, kann es als KeyStore.TrustedCertificateEntry in den Keystore importiert werden. Ich kann jedoch keinen Zertifikatseintrag für den Typ org.bouncycastle.openpgp.PGPPublicKey erstellen.
Ich habe durch das Web durchsucht, konnte aber keine gültige Beispiel finden:
- BouncyCastle Dokumentation: http://www.bouncycastle.org/wiki/display/JA1/X.509+Public+Key+Certificate+and+Certification+Request+Generation Erzeugt Zertifikat für X.509-Schlüssel -
BouncyCastle Beispiele - org.bouncycastle.openpgp. examples.DirectKeySignature: Fügen Sie certificat (Objekt vom Typ PGPSignature) direkt zum PGPPublicKey hinzu. Zum Schluss - Ich habe (zertifiziert) PGPPublicKey unterzeichnet, aber ich bin nicht in der Lage, diese Art von Schlüssel in den Java Keystore zu speichern.
OutputStream out = new ByteArrayOutputStream(); if (armor) { out = new ArmoredOutputStream(out); } PGPPrivateKey pgpPrivKey = secretKey.extractPrivateKey(secretKeyPass.toCharArray(), "BC"); PGPSignatureGenerator sGen = new PGPSignatureGenerator(secretKey.getPublicKey().getAlgorithm(), PGPUtil.SHA1, "BC"); sGen.initSign(PGPSignature.DIRECT_KEY, pgpPrivKey); BCPGOutputStream bOut = new BCPGOutputStream(out); sGen.generateOnePassVersion(false).encode(bOut); PGPSignatureSubpacketGenerator spGen = new PGPSignatureSubpacketGenerator(); boolean isHumanReadable = true; spGen.setNotationData(true, isHumanReadable, notationName, notationValue); PGPSignatureSubpacketVector packetVector = spGen.generate(); sGen.setHashedSubpackets(packetVector); bOut.flush(); return PGPPublicKey.addCertification(keyToBeSigned, sGen.generate()).getEncoded();
Ich bin vor allem interessiert an programatic Lösung (Java-Quellcode), sondern Beispiele, die einige Werkzeuge verwenden zu hilfreich sein.
Danke!