使用 BouncyCastle API 生成 CSR

2022-09-02 01:09:31

我是Java安全方面的新手,偶然发现了这个名为BouncyCastle的库。但是他们提供的例子和互联网上的例子要求使用

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

但是当我使用时,它看起来已被弃用。所以我开始研究另一种使用类的方法。但是我真的很困惑,构造函数不采用相同的参数,而是采用我不确定如何填充的类。PKCS10CertificationRequestCertificationRequestCertificationRequestInfo

CertificationRequest request = new CertificationRequest(...);

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


答案 1

对于最新版本的 BouncyCastle,建议使用该类创建 CSR。org.bouncycastle.pkcs.PKCS10CertificationRequestBuilder

您可以使用以下代码截图:

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);

答案 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();

我认为一个有用的链接