Đây là những gì tôi có ngay bây giờ để tạo chứng chỉ số. Và bây giờ tôi có thể tạo một chứng chỉ số với mật khẩu được bảo vệ cho khóa riêng.Tạo chứng chỉ X509 với BouncyCastle bằng Java
public static void main(String[] args) throws Exception {
Security.addProvider(new BouncyCastleProvider());
testKeyStore();
}
public static void testKeyStore() throws Exception {
try {
String storeName = "d://suresh_test.cer";
java.security.KeyPairGenerator keyPairGenerator = KeyPairGenerator
.getInstance("RSA");
keyPairGenerator.initialize(2048);
KeyPair keyPair = keyPairGenerator.generateKeyPair();
PublicKey publicKey = keyPair.getPublic();
PrivateKey privateKey = keyPair.getPrivate();
X509Certificate trustCert = createCertificate("CN=CA", "CN=CA",
publicKey, privateKey);
java.security.cert.Certificate[] outChain = {
createCertificate("CN=Client", "CN=CA", publicKey,
privateKey), trustCert };
KeyStore outStore = KeyStore.getInstance("PKCS12");
outStore.load(null, "suresh_".toCharArray());
outStore.setKeyEntry("mykey", privateKey, "suresh_".toCharArray(),
outChain);
OutputStream outputStream = new FileOutputStream(storeName);
outStore.store(outputStream, "suresh_".toCharArray());
outputStream.flush();
outputStream.close();
KeyStore inStore = KeyStore.getInstance("PKCS12");
inStore.load(new FileInputStream(storeName),
"suresh_".toCharArray());
} catch (Exception e) {
e.printStackTrace();
throw new AssertionError(e.getMessage());
}
}
private static X509Certificate createCertificate(String dn, String issuer,
PublicKey publicKey, PrivateKey privateKey) throws Exception {
X509V3CertificateGenerator certGenerator = new X509V3CertificateGenerator();
certGenerator.setSerialNumber(BigInteger.valueOf(Math.abs(new Random()
.nextLong())));
certGenerator.setIssuerDN(new X509Name(dn));
certGenerator.setSubjectDN(new X509Name(dn));
certGenerator.setIssuerDN(new X509Name(issuer)); // Set issuer!
certGenerator.setNotBefore(Calendar.getInstance().getTime());
certGenerator.setNotAfter(Calendar.getInstance().getTime());
certGenerator.setPublicKey(publicKey);
certGenerator.setSignatureAlgorithm("SHA1WithRSAEncryption");
X509Certificate certificate = (X509Certificate) certGenerator.generate(
privateKey, "BC");
return certificate;
}
Làm cách nào để tự ký?
Tôi không có manh mối.
Tôi làm cách nào để tiếp tục?
Cảm ơn mọi gợi ý.
Câu hỏi của bạn không giải thích những gì bạn đã làm để thử và giải quyết vấn đề; nó hiện đang đọc như một yêu cầu cho mã. Vui lòng chia sẻ việc triển khai đã thực hiện của bạn và giải thích cách nó không đáp ứng được các yêu cầu của bạn. –
@DuncanJones Vâng, tôi đã tạo chứng chỉ. Nhưng không biết làm thế nào để ký nó bằng cách sử dụng API lâu đài bouncy, không tìm thấy bất kỳ điều gì trong trang web của họ. Cảm ơn đã giúp đỡ. –