当前位置: 首页 > 知识库问答 >
问题:

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

段干宏硕
2023-03-14

伙计们!我正在尝试使用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();

共有1个答案

谭吉星
2023-03-14

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

 类似资料:
  • 问题内容: 我正在慢慢地疯狂尝试配置Spring Security 3.0.0以保护应用程序。 我已将服务器(码头)配置为要求客户端身份验证(使用智能卡)。但是,我似乎无法正确获得applicationContext- security.xml和UserDetailsS​​ervice实现。 首先,从应用程序上下文文件中: UserDetailsS​​ervice看起来像这样: } 该应用程序具有

  • 问题内容: 我正在尝试根据此帖子更新SSL证书 。 我没有证书,因此我遵循了本指南。但是,当我进入 我得到错误: 我该如何解决? 问题答案: 您的cacerts.pem文件是否包含一个证书?由于它是PEM,因此请先看一下 并以 最后,要检查它是否未损坏,请使用openssl并使用来打印其详细信息

  • 问题内容: 可以说我有这样的东西(客户端代码): 这段代码是完整的功能,但是我真的不知道如何根据pem文件中可用的一个具体的CA证书来验证服务器的证书。 所有证书均由我的自签名CA签名,这是我需要根据其进行验证的CA(仅针对此证书)。 每个答案表示赞赏。 编辑: 回应 jglouie (非常感谢您-无法投票支持您的答案)。 我创建了解决方案: 问题答案: 我假设您的CA的自签名证书已按以下方式加载

  • 问题内容: 是否可以在不使用Bouncy Castle 类的情况下用Java代码合理地创建X509证书? 问题答案: 签名证书的能力不是标准Java库或扩展的一部分。 您自己需要做的许多代码都是核心的一部分。有一些类可以编码和解码X.500名称,X.509证书扩展,各种算法的公钥,当然还有用于实际执行数字签名的类。 自己实施这项工作并非易事,但绝对是可行的-我第一次制作可用于证书签名的原型时,可能

  • 我正在用以下组件构建自己的证书链: 根证书是自签名证书,中间证书由根证书和用户由中间证书签名。 现在我想验证一个用户证书是否有其根证书的锚。 具有 验证是可以的。在下一步中,我将使用 验证结果显示 什么是错的?

  • inter证书有什么用? 我有这个证书链: root-VeriSign Class 3 Public Primary Certification Authority-g5.cer Inter-Symantec Class 3 EV SSL CA-G3.CER website.pfx