Openssl 如果私钥在HSM中,如何生成证书?

Openssl 如果私钥在HSM中,如何生成证书?,openssl,x509certificate,hsm,Openssl,X509certificate,Hsm,我经常使用openssl生成RSA密钥和证书。但现在我遇到了一个问题openssl x509-req需要私钥作为输入。但是现在我们使用HSM来保护私钥,我将永远无法接触私钥。通过这种方式,我应该如何生成x509证书?使用HSM支持的函数(通常是HSM提供程序支持并提供所需的库),如加密(),解密(),签名(),以获取所需的数据。您无法从HSM获取私钥对象,也无法将openssl用于HSM。我看到一些HSM自带了自己的支持程序,可用于各种事情,包括密钥生成、证书或CSR创建,或使其可用(例如在供应

我经常使用
openssl
生成RSA密钥和证书。但现在我遇到了一个问题<代码>openssl x509-req需要私钥作为输入。但是现在我们使用HSM来保护私钥,我将永远无法接触私钥。通过这种方式,我应该如何生成x509证书?

使用HSM支持的函数(通常是HSM提供程序支持并提供所需的库),如
加密()
解密()
签名()
,以获取所需的数据。您无法从HSM获取私钥对象,也无法将
openssl
用于HSM。

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

您没有识别您的HSM;虽然有相当一部分(不是几乎所有)使用“标准”(大部分)接口,但有数千个模型至少有数百个接口

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

  • 如果您的HSM是具有内置引擎的HSM之一,请根据其文档根据需要配置该引擎,并使用适当的
    -engine id
    -*engine id
    选项执行
    openssl
    (sub)命令 请注意,
    req-new
    仅使用
    -x509
    生成证书,通常加上一些相关参数,并且以这种方式生成的证书是自签名的;否则,
    req-new
    会生成一个证书签名请求(CSR),然后让CA“转换”为CA签名的“真实”证书(PKCS#10 CSR本身始终是自签名的)
    req
    还可以生成一个新的私钥,而不是使用现有的私钥,并且此生成可以在HSM上的引擎中进行

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

  • 如果您的HSM没有任何引擎,但其API提供了OpenSSL希望在引擎中执行的操作,那么您可以为其编写(并调试!)引擎模块。然后使用您的发动机按照1中的步骤进行操作。也可以考虑将引擎模块提供给世界、社区使用这种类型的HSM和/或OpenSSL项目。

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

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


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

    到目前为止,我知道没有办法使用HSM从openssl生成证书。您使用的是哪种HSM?我相信您可以使用引擎来命令HSM。这个问题似乎属于堆栈交换网络中的另一个站点beca使用它与编程或开发无关。也许您应该尝试,或者。请注意,HSM的应用程序可能并不总是最好的应用程序,也可能不是最新的。当然,使用HSM生成证书和请求的最通用方法是在其上安装证书颁发机构软件,如EJBCA(在Java企业应用程序服务上使用Java构建,所有开源+可能的支持选项-我没有关联)。请注意,这些类型的应用程序可能过于复杂,可能会让您遇到陡峭的学习曲线和棘手的安装。该链接(到文档)已断开…