Hy Guys! Ich versuche, x.509-Zertifikat mit bouncycastle zu erstellen, die von einem anderen Zertifikat signiert werden sollte und speichern Sie es PEM-Basis 64-Format.Erstellen x.509-Zertifikat mit Bouncycastle mit Zertifikatspfad (Cert-Kette)
Ich habe bereits selbstsigniertes Zertifikat (öffentlicher und privater Schlüssel). Jetzt möchte ich eine neue erstellen und mit einem selbstsignierten Zertifikat signieren.
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");
Überprüfung bestanden, ohne Ausnahmen, die aus meiner Sicht bedeutet, dass es erfolgreich von CAcert signiert wurde:
cert.verify(caCert.getPublicKey());
Dann habe ich dekodieren es an die PEM Basis 64:
PEMWriter pemWriter = new PEMWriter(new PrintWriter(System.out));
pemWriter.writeObject(cert);
pemWriter.flush();
Ich bekomme so etwas in der Ausgabe:
----- BEGIN ZERTIFIKAT -----
MIIDDjCCAnegAwIBAgIBFDAN ........
----- END CERTIFICATE -----
Wenn ich es öffne, sehe ich das nächste:
Warum gibt es keine Zertifizierungskette, wenn sie von caCert erfolgreich signiert wurde?
Was muss in meinem Code geändert werden, damit die Zertifizierungskette wie erwartet angezeigt wird?