Java 使用带有证书路径(证书链)的bouncycastle创建x.509证书

Java 使用带有证书路径(证书链)的bouncycastle创建x.509证书,java,ssl-certificate,x509certificate,bouncycastle,x509,Java,Ssl Certificate,X509certificate,Bouncycastle,X509,嗨,伙计们!我正在尝试使用bouncycastle创建x.509证书,它应该由另一个证书签名并以PEM base 64格式存储 我已经有了自签名证书(公钥和私钥)。现在我想创建一个新的,并用现有的自签名证书对其进行签名 KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA", "BC"); keyPairGenerator.initialize(1024, new Sec

嗨,伙计们!我正在尝试使用bouncycastle创建x.509证书,它应该由另一个证书签名并以PEM base 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();
我在输出中得到如下结果:

-----开始证书-----

Miiddjccanegawibagifdan

-----结束证书-----

当我打开它时,我看到下一个:

如果由caCert成功签署,为什么没有证书链


我的代码中需要更改什么才能看到我期望的认证链?

我找到了解决方案。实际上,代码按预期工作。我没有看到证书链,因为我的caRoot证书没有添加到受信任的存储中。在我将sel签名的证书添加到受信任的根认证中心后,我看到了我所期望的整个认证链