1

当在 HSM(硬件安全模块)中生成私钥/公钥对时,想要在 java 中创建一个 CSR 文件。

在尝试 Bouncy Castle 中的示例时,CSR 的生成需要私钥和公钥。由于密钥的生成发生在 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 很陌生,任何输入或参考都会有所帮助。

4

1 回答 1

3

您可以在没有私钥的情况下生成 CSR 。您确实需要对私钥的引用,并且该密钥必须能够签名。对私钥的引用只是实现PrivateKey. 它们不包含数据,仅包含参考。但是,调用getEncoded或检索 RSA 密钥的私有指数(通常 - 它可能取决于密钥生成参数和 PKCS#11 中间件)会失败并出现异常。

可以使用这些键的方式是将它们提供给新生成的实例的init方法。然后,Java 运行时将在正确的提供者(您的 HSM 的那个)中搜索正确的实现。这称为延迟提供程序选择,因为它仅在调用方法后才搜索实现。当然,在您的情况下,这一切都将在. SignatureSignatureSpiinitContentSigner

私钥数据在任何时候都不应离开您的 HSM,除非为 HSM 之间的备份或共享而打包。

于 2015-02-06T23:48:13.793 回答