2013-02-28 18 views
11

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:

enter image description here

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?

Odpowiedz

8

Udało mi się znaleźć rozwiązanie. Właściwie kod działa zgodnie z oczekiwaniami. Nie widziałem łańcucha certyfikatów, ponieważ mój certyfikat caRoot nie został dodany do zaufanego sklepu. Po dodaniu certyfikatu z certyfikatem sel do zaufanych głównych certyfikowanych centrów, widzę cały łańcuch certyfikacji zgodnie z oczekiwaniami.