我是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以便我可以将其发送到服务器以进行签名,那将是非常棒的。
谢谢,
答案 0 :(得分:20)
使用最新版本的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);
答案 1 :(得分:0)
和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();
我认为有用的link