【问题标题】:Generating the CSR using BouncyCastle API使用 BouncyCastle API 生成 CSR
【发布时间】:2013-12-30 05:44:19
【问题描述】:

我是 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 以便我可以将其发送到服务器进行签名,那就太棒了。

【问题讨论】:

    标签: java security certificate bouncycastle


    【解决方案1】:

    和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

    【讨论】:

      【解决方案2】:

      对于最新版本的 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?
      • 我明白了.. 在 PEMWriter 类的帮助下完成了.. 感谢您的帮助。
      • 对于新代码,我建议使用 JcaPEMWriter 而不是 PEMWriter。相同的界面,但 PEMWriter 现在已弃用。
      • 如何用智能卡做到这一点?既然私钥就在卡本身上?
      • @VikramSinghShekhawat 您可以在 X500Principal 中添加这些信息。例如 new X500Principal("CN=Requested Test Certificate, O=Test Inc, C=US")
      猜你喜欢
      • 2015-08-14
      • 2015-11-28
      • 2016-05-30
      • 2021-11-01
      • 2012-04-13
      • 2013-10-24
      • 1970-01-01
      • 2016-12-05
      • 1970-01-01
      相关资源
      最近更新 更多