2013-02-28 3 views
11

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:

enter image description here

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?

Antwort

8

Ich konnte eine Lösung finden. Tatsächlich funktioniert der Code wie erwartet. Ich habe die Zertifikatskette nicht gesehen, weil mein caRoot-Zertifikat nicht zum vertrauenswürdigen Speicher hinzugefügt wurde. Nachdem ich mein selbstsigniertes Zertifikat den vertrauenswürdigen root-zertifizierten Zentren hinzugefügt habe, sehe ich die gesamte Zertifizierungskette wie erwartet.

Verwandte Themen