我们可以使用 HSM 创建证书签名请求 (CSR) 吗?

我们可以使用 HSM 创建证书签名请求 (CSR) 吗?

我可以使用 HSM 生成 CSR 吗?如果可以,请指导我们。这将非常有帮助。

以下是我们的系统详细信息:

  • 我们有HSM(SafeNet)模拟器来测试开发应用程序。
  • 我们正在使用基于桌面的应用程序 Cryptoki.dll 来执行加密操作。

现在我们想知道 HSM 是否可以生成 CSR?如果可以,那么如何生成?

答案1

我做了研究并关注PKCS #11OASIS文档标准:

http://docs.oasis-open.org/pkcs11/pkcs11-base/v2.40/os/pkcs11-base-v2.40-os.html

最后,我可以管理证书请求(企业社会责任) 来自 HSM。

以下是实现相同目标的步骤:

  1. 生成密钥对(私人、公共)
  2. 派生密钥(C_DeriveKey)从公钥并赋予以下属性:
    • 机制 -ENCODE_PKCS_10(证书请求)
    • 签名密钥(私钥)
    • 签名机制 -SHA1_RSA_PKCS

答案2

您正在使用“dll”,因此在 Windows 上。

SafeNet HSM 将附带客户端软件,您可以将其安装在需要访问设备的服务器上。安装并正确配置后,它会显示为微软加密API密钥存储提供商。

当您尝试请求证书时,此新的提供程序会显示在可能的加密提供程序列表中(除了软件模块)。

此外,Gemalto (SafeNet) 还提供通过以下方式直接与 HSM 交互的软件PKCS#11因此非 CAPI 应用程序(例如 OpenSSL)以及.jarJava 应用程序都可以访问文件。

答案3

  1. 在 HSM 中生成带有公钥和私钥标签的 RSA 密钥对。
  2. 取出 HSM 公钥。将 HSM 公钥转换为基于 Java 的公钥,并加上模数和公开指数(使用 RSAPublicKeySpec 类)
  3. 使用主题和公钥创建CertificateRequestInfo(步骤2)
  4. 使用 HSM 中的私钥对步骤 3 的数据进行签名(使用私钥标签和 findObject 来定位私钥)
  5. 使用算法、签名(步骤 4)和 CertificationRequestInfo(步骤 3)计算 CertificationRequestValue
  6. 将步骤 5 的结果编码为 Base64,并添加“-----BEGIN NEW CERTIFICATE REQUEST-----”和“-----END NEW CERTIFICATE REQUEST-----”

我按照这里的代码操作-https://gist.github.com/dopoljak/e7550dd0c01a3438c24c并根据我的要求进行了修改。

感谢 Domagoj Poljak!!

干杯

相关内容