2013-02-28 28 views
11

Hy Guys!私はbouncycastleを使用してx.509証明書を作成しようとしています。これは別の証明書で署名し、PEMベース64形式で保存する必要があります。証明書パス(証明書チェーン)付きのbouncycastleを使用してx.509証明書を作成

私はすでに自己署名証明書(公開鍵と秘密鍵)を持っています。今、私は新しいものを作成し、既存の自己署名証明書で署名したいと思います。

PEMWriter pemWriter = new PEMWriter(new PrintWriter(System.out)); 
pemWriter.writeObject(cert); 
pemWriter.flush(); 

cert.verify(caCert.getPublicKey()); 

は、その後、私はPEMベース64にそれをデコード:

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"); 

検証は、それが成功しcaCertによって署名されたことを私の視点から意味し、例外なしに通過しました

私は次のような出力を得ます:

----- BEGIN CERTIFICATE -----

MIIDDjCCAnegAwIBAgIBFDAN ........

----- END CERTIFICATE -----の

私はそれを開くと、私は次を参照してください。

enter image description here

caCertが正常に署名した場合、認証チェーンが存在しないのはなぜですか?

私は期待どおりに認証チェーンを見るために私のコードで変更する必要がありますか?

答えて

8

私は解決策を見つけることができました。実際には、コードは期待通りに機能します。 caRoot証明書が信頼できるストアに追加されていないため、証明書のチェーンが表示されませんでした。私が署名した証明書を信頼されたルート認定センターに追加すると、私は期待通りに証明書チェーン全体を見ることができます。

関連する問題