生成随机证书

时间:2012-03-20 13:13:28

标签: java

我正在寻找一个可以为测试目的生成随机证书字符串的实用程序类。有没有想过是否已经实施了?

2 个答案:

答案 0 :(得分:5)

添加到martijno给出的解决方案,

可以使用JCAContentSigner来避免映射到AlgorithmIdentifier(即OID),而不是编写自己的内容签名者。

JcaContentSignerBuilder采用定义为here的算法名称。

X509v3CertificateBuilder certBuilder = new X509v3CertificateBuilder(issuer, serialNumber, startDate, expiryDate, subject, SubjectPublicKeyInfo.getInstance(keyPair.getPublic().getEncoded()));
JcaContentSignerBuilder builder = new JcaContentSignerBuilder("SHA256withRSA");
ContentSigner signer = builder.build(keyPair.getPrivate());

byte[] certBytes = certBuilder.build(signer).getEncoded();
CertificateFactory certificateFactory = CertificateFactory.getInstance("X.509");
X509Certificate certificate = (X509Certificate)certificateFactory.generateCertificate(new ByteArrayInputStream(certBytes));

答案 1 :(得分:4)

内置的Java X500库比生成解析证书更适合使用证书。您可能会找到一种方法来执行您想要的操作,但它几乎肯定会在受保护的API(sun.security.*)中变得混乱。

我建议你加入Bouncy Castle库(Apache License)。它有一个名为X509V3CertificateGenerator的类,您可以使用它来设置证书的字段(发行者,主题,到期日期等)。

然后,您应该可以使用PEMWriter类从中获取PEM字符串。