使用BouncyCastle API生成CSR

25

我对Java安全方面很陌生,偶然发现了一个叫做BouncyCastle的库。但是他们提供的示例和网上的一些示例都要求使用

return new PKCS10CertificationRequest("SHA256withRSA", new X500Principal(
    "CN=Requested Test Certificate"), pair.getPublic(), null, pair.getPrivate()

但是当我使用PKCS10CertificationRequest时,它看起来已经过时了。所以我开始研究另一种方法,使用CertificationRequest类。但我很困惑,构造函数不使用相同的参数,而是需要CertificationRequestInfo类,我不确定如何填写它。

CertificationRequest request = new CertificationRequest(...);

如果有人能帮我弄清楚如何生成CSR,以便我可以将其发送到服务器进行签名,那就太好了。

2个回答

39

最近版本的BouncyCastle推荐使用org.bouncycastle.pkcs.PKCS10CertificationRequestBuilder类来创建CSR。

您可以使用以下代码片段:

KeyPair pair = generateKeyPair();
PKCS10CertificationRequestBuilder p10Builder = new JcaPKCS10CertificationRequestBuilder(
    new X500Principal("CN=Requested Test Certificate"), pair.getPublic());
JcaContentSignerBuilder csBuilder = new JcaContentSignerBuilder("SHA256withRSA");
ContentSigner signer = csBuilder.build(pair.getPrivate());
PKCS10CertificationRequest csr = p10Builder.build(signer);

谢谢。我该如何打印CSR? - Fox
2
我明白了..借助PEMWriter类完成了它..感谢你的帮助。 - Fox
3
对于新的代码,我建议使用JcaPEMWriter代替PEMWriter。它们具有相同的接口,但是PEMWriter现在已经被弃用了。 - Tim Mattison
2
@VikramSinghShekhawat,您可以将这些信息添加到X500Principal中。例如:new X500Principal("CN=Requested Test Certificate, O=Test Inc, C=US")。 - Jcs
对于那些寻找包含这些类的Maven/Gradle软件包的人:https://mvnrepository.com/artifact/org.bouncycastle/bcpkix-jdk15to18 - user1053510
显示剩余3条评论

2

这与Jcs的答案非常相似,只是稍微补充了一点。

不要忘记添加:

Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider());

CSR生成:

    KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA", "BC");
    keyPairGenerator.initialize(4096);
    KeyPair keyPair = keyPairGenerator.generateKeyPair();
    
    PKCS10CertificationRequestBuilder p10Builder = new JcaPKCS10CertificationRequestBuilder(
            new X500Principal("OU=Try, C=US## Heading ##"), keyPair.getPublic());

    JcaContentSignerBuilder csBuilder = new JcaContentSignerBuilder("SHA256withRSA");
    ContentSigner signer = csBuilder.build(keyPair.getPrivate());
    PKCS10CertificationRequest csr = p10Builder.build(signer);

    JcaPEMWriter jcaPEMWriter = new JcaPEMWriter(new FileWriter("cert/test.csr"));
    jcaPEMWriter.writeObject(csr);
    jcaPEMWriter.close();

I think a useful link


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接