2015-02-06 37 views
0

希望在HSM(硬件安全模块)中生成私钥/公钥对时,在java中创建CSR文件。使用java或BouncyCastle而不使用私钥的CSR一代

在尝试在充气城堡的例子中,企业社会责任的产生既需要私有密钥和公共key.As密钥的生成是在HSM发生的事情,我只有公钥私钥假对象。 我可以在没有私钥的情况下在java中生成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); 

我是HSM的新手,任何输入或参考都会有所帮助。

+0

那么,它失败或什么? – 2015-02-06 23:39:35

回答

2

您可以生成CSR,而不需要私钥的。您确实需要对私钥的引用,并且密钥必须能够签名。引用私钥只是实现PrivateKey的特殊版本的类。他们不包含数据,只是参考。然而,调用getEncoded或检索RSA密钥的私有指数(通常 - 它可能取决于密钥生成参数和PKCS#11中间件)会失败并产生异常。

这些键可使用的方法是通过只将它们提供给一个新生成Signature实例的init方法。然后Java运行时将在正确的提供程序(用于HSM的那个提供程序)中搜索正确的SignatureSpi实现。这被称为延迟供应商选择,因为它只调用init方法后搜索实施。当然在你的情况下,这一切都将在ContentSigner之外发生。

私钥数据不应该在任何时候离开HSM,除非包装用于HSM之间的备份或共享。

相关问题