Hy Guys! Próbuję utworzyć certyfikat x.509 za pomocą bouncycastle, który powinien być podpisany przez inny certyfikat i przechowywać go w formacie PEM base 64.Utwórz certyfikat x.509 za pomocą bouncycastle ze ścieżką certyfikatu (łańcuch certyfikatów)
Posiadam już certyfikat z podpisem własnym (klucz publiczny i prywatny). Teraz chcę utworzyć nowy i podpisać go za pomocą istniejącego samopodpisanego certyfikatu.
KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA", "BC");
keyPairGenerator.initialize(1024, new SecureRandom());
KeyPair keyPair = keyPairGenerator.generateKeyPair();
X509V3CertificateGenerator certGen = new X509V3CertificateGenerator();
X500Principal dnName = new X500Principal("CN=Sergey");
certGen.setSerialNumber(BigInteger.valueOf(System.currentTimeMillis()));
certGen.setSubjectDN(dnName);
certGen.setIssuerDN(caCert.getSubjectX500Principal());
certGen.setNotBefore(validityBeginDate);
certGen.setNotAfter(validityEndDate);
certGen.setPublicKey(keyPair.getPublic());
certGen.setSignatureAlgorithm("SHA256WithRSAEncryption");
certGen.addExtension(X509Extensions.AuthorityKeyIdentifier, false, new AuthorityKeyIdentifierStructure(caCert));
certGen.addExtension(X509Extensions.SubjectKeyIdentifier, false, new SubjectKeyIdentifierStructure(keyPair.getPublic()));
X509Certificate cert = certGen.generate(caCertPrivateKey, "BC");
Weryfikacja przeszedł bez wyjątków, co oznacza, że z mojego punktu widzenia, że został pomyślnie podpisany przez CAcert:
cert.verify(caCert.getPublicKey());
Potem dekodować go do podstawy PEM 64:
PEMWriter pemWriter = new PEMWriter(new PrintWriter(System.out));
pemWriter.writeObject(cert);
pemWriter.flush();
Otrzymuję coś takiego na wyjściu:
----- BEGIN CERTYFIKAT -----
MIIDDjCCAnegAwIBAgIBFDAN ........
----- END CERTIFICATE -----
Kiedy go otworzyć, widzę obok:
Dlaczego nie ma łańcucha certyfikacji, jeśli został on pomyślnie podpisany przez CaCert?
Co należy zmienić w moim kodzie, aby zobaczyć łańcuch certyfikacji zgodnie z oczekiwaniami?