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型号或生产线的制造商或供应商,包括您
-engine id
或-*engine id
选项执行openssl
(sub)命令李>
请注意,req-new
仅使用-x509
生成证书,通常加上一些相关参数,并且以这种方式生成的证书是自签名的;否则,req-new
会生成一个证书签名请求(CSR),然后让CA“转换”为CA签名的“真实”证书(PKCS#10 CSR本身始终是自签名的)req
还可以生成一个新的私钥,而不是使用现有的私钥,并且此生成可以在HSM上的引擎中进行
openssl/apps/req.c
的一些(可能很多)代码生成私钥和/或在HSM上使用现有的私钥,在OpenSSL中或多或少地以现有的方式构建证书(或CSR)的数据结构,然后使用使用HSM API的自定义方法设置X509[REQ\uuu]sign\u ctx
一个EVP\u PKEY
(OpenSSL中用于各种类型非对称密钥的多态C数据结构)(以及HSM上钥匙的一些标识)进行签名。
确保程序上的任何许可证都与OpenSSL许可证(本质上是BSD广告风格)兼容您需要安装和配置PKCS#11中间件(驱动程序),编译engine_pkcs11模块,可能需要对上面的说明进行一些修改。到目前为止,我知道没有办法使用HSM从openssl生成证书。您使用的是哪种HSM?我相信您可以使用引擎来命令HSM。这个问题似乎属于堆栈交换网络中的另一个站点beca使用它与编程或开发无关。也许您应该尝试,或者。请注意,HSM的应用程序可能并不总是最好的应用程序,也可能不是最新的。当然,使用HSM生成证书和请求的最通用方法是在其上安装证书颁发机构软件,如EJBCA(在Java企业应用程序服务上使用Java构建,所有开源+可能的支持选项-我没有关联)。请注意,这些类型的应用程序可能过于复杂,可能会让您遇到陡峭的学习曲线和棘手的安装。该链接(到文档)已断开…