Tôi đang sử dụng bouncycastle (JAVA) để ký, mã hóa, giải mã và xác minh chữ ký khi triển khai SSO. Tôi có khóa PGP công khai và riêng tư và tôi cần lưu trữ chúng trong kho khóa Java. Các khóa công khai PGP này không có chứng chỉ.Lưu khóa PGP (công khai) trong kho khóa java - Bouncycastle
Tôi hiểu rằng đối với khóa công cộng (theo javadoc của Keystore: http://docs.oracle.com/javase/6/docs/api/java/security/KeyStore.html) Tôi phải tạo chứng chỉ. Sau khi chứng chỉ được tạo, tôi có thể nhập nó vào kho khóa là KeyStore.TrustedCertificateEntry. Tuy nhiên, tôi không thể tạo mục nhập chứng chỉ cho loại org.bouncycastle.openpgp.PGPPublicKey.
Tôi đã tìm kiếm thông qua các trang web nhưng không thể tìm thấy bất kỳ ví dụ hợp lệ:
- BouncyCastle tài liệu: http://www.bouncycastle.org/wiki/display/JA1/X.509+Public+Key+Certificate+and+Certification+Request+Generation Tạo giấy chứng nhận cho các phím X.509 -
BouncyCastle ví dụ - org.bouncycastle.openpgp. example.DirectKeySignature: Thêm certificat (đối tượng kiểu PGPSignature) trực tiếp vào PGPPublicKey. Để kết luận - Tôi đã ký (PGPPublicKey đã được chứng nhận) nhưng tôi không thể lưu loại khóa này vào kho khóa java.
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();
tôi chủ yếu quan tâm đến giải pháp programatic (mã nguồn java) nhưng ví dụ có sử dụng một số công cụ sẽ rất hữu ích quá.
Cảm ơn!