ハイ・ガイズ!bouncycastle を使用して x.509 証明書を作成しようとしています。この証明書は、別の証明書によって署名され、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 によって正常に署名されたことを意味します。
cert.verify(caCert.getPublicKey());
次に、PEM base 64 にデコードします。
PEMWriter pemWriter = new PEMWriter(new PrintWriter(System.out));
pemWriter.writeObject(cert);
pemWriter.flush();
出力に次のようなものが表示されます。
-----証明書の開始-----
MIIDDjCCAnegAwIBAgIBFDAN........
---エンド証明書-----
それを開くと、次のように表示されます。
caCert によって正常に署名された場合、証明書チェーンがないのはなぜですか?
証明書チェーンを期待どおりに表示するには、コードで何を変更する必要がありますか?