【问题标题】:How to generate certificate if private key is in HSM?如果私钥在 HSM 中,如何生成证书?
【发布时间】:2015-06-18 03:08:02
【问题描述】:

我经常使用openssl 来生成RSA 密钥和证书。但是现在我遇到了一个问题。 openssl x509 -req 需要私钥作为输入。但是现在我们使用 HSM 来保护私钥,我永远无法触摸私钥。这样我想如何生成 x509 证书?

【问题讨论】:

标签: openssl x509certificate hsm


【解决方案1】:

我已经看到一些 HSM 带有自己的支持程序,可用于各种事情,包括密钥生成和证书或 CSR 创建,或使它们可用(例如在供应商网站上) );你检查了吗? 假设这不是一个(好的)选择:

您没有识别您的 HSM;有数千个模型至少有数百个接口,尽管很大一部分(不是几乎全部)使用“标准”(大部分)PKCS#11 接口。

OpenSSL 有一个相当开放的ENGINE API,它将加密功能的一些子集(例如私钥生成、签名和解密)重定向到不同于 OpenSSL 常规实现的实现(例如 HSM)。 OpenSSL 内置了一些引擎——至少在默认情况下是这样;特定的构建(例如 Linux 发行版的包)可能会省略内置引擎,在这种情况下,您可能需要自己构建。其他人也可以编写引擎模块,包括但不限于特定 HSM 型号或生产线的制造商或供应商,包括您。

  1. 如果您的 HSM 是具有内置引擎的 HSM 之一,请根据其文档根据需要配置该引擎,并在您的 openssl(子)命令中使用适当的 -engine id-*engine id 选项。

注意req -new生成的证书只有-x509,通常加上一些相关的参数,这样生成的证书是自签名的;否则req -new 会生成证书签名请求 (CSR),然后您可以让 CA “转换”为 CA 签名的“真实”证书(PKCS#10 CSR 本身是始终自签名的)。 req 还可以生成一个新的私钥,而不是使用现有的,并且这一代可以“在”引擎中,因此在 HSM 上。

  1. 如果您的 HSM 没有内置引擎,但有来自其他方的引擎,请将其安装到您的系统中。 PKCS#11 就是这种情况。这可能需要将您的 OpenSSL 版本更改为引擎支持的版本。然后按照1:配置引擎并使用它。

  2. 如果您的 HSM 没有任何引擎,但其 API 提供了 OpenSSL 在引擎中所需的操作,您可以为其编写(和调试!)引擎模块。然后按照 1 使用您的引擎进行操作。还可以考虑向全世界、使用此类 HSM 的社区和/或 OpenSSL 项目提供您的引擎模块。

  3. 如果您的 HSM 的功能不适合引擎 API,或者不存在引擎模块并且您不想创建一个,您可以编写自己的程序,使用一些(也许很多)来自openssl/apps/req.c 的代码,用于生成私钥和/或使用现有的 HSM,以或多或少的现有方式在 OpenSSL 中为证书(或 CSR)构建数据结构,但是然后给 X509_[REQ_]sign_ctx 一个 EVP_PKEY(OpenSSL 中用于各种类型非对称密钥的多态 C 数据结构),您已使用 使用 HSM 的 API 的自定义方法设置它(以及HSM 上的一些密钥标识)来进行签名。 确保您的程序上的任何许可都与 OpenSSL 许可(本质上是 BSD 广告风格)兼容。

【讨论】:

  • 请注意,HSM 的应用程序可能并不总是最好的应用程序,也可能是最新的。当然,使用 HSM 生成证书和请求的最通用方法是在其上放置证书颁发机构软件,例如 EJBCA(在 Java 企业应用程序服务上使用 Java 构建,所有开源 + 可能的支持选项 - 我不是附属)。请注意,这些类型的应用程序可能太过分了,并且可能会给您带来陡峭的学习曲线和棘手的安装。
【解决方案2】:

大多数 HSM 都有 PKCS#11 驱动程序。您可以使用 OpenSC 的 engine_pkcs11 来启用 OpenSSL 以利用 HSM(或智能卡)。有一个document 说明如何使用它来创建请求。

您需要安装和配置 PKCS#11 中间件(驱动程序),编译 engine_pkcs11 模块,并且可能需要对上述说明进行一些修改。

【讨论】:

  • 那个链接(到文档)被破坏了……
【解决方案3】:

使用 HSM 支持的函数(通常是 HSM 提供程序支持并提供所需的库),如 encrypt()decrypt()sign() 来获取所需的数据。您无法从 HSM 获取私钥对象,也无法将 openssl 用于 HSM。

【讨论】:

  • 到目前为止我知道,没有办法使用 HSM 从 openssl 生成证书。
  • 查看相应的 HSM 文档 Saqib。例如对于 SC-HSM,github.com/OpenSC/OpenSC/wiki/… - 这完全描述了:如何使用 HSM 从 openssl 生成证书。使用它们各自的 PKCS11 提供程序,其他 HSM 类型的过程相同。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-06
  • 2017-07-15
  • 2010-10-29
  • 2011-11-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多