根据顾问的一些指导,我正在尝试使用 HSM 实施 PKI。 我已在 HSM 内成功创建了一个非对称对,并将公钥导出到文件中。
从那里我应该使用此公钥创建一个证书和 CSR,我将其提交回我的 HSM 以使用密封的私钥进行签名。 这就是我被困住的地方。
最好使用 OpenSSL,我该如何实现这一点? 我已经完成了“openssl req”和“openssl x509”命令,但我似乎无法弄清楚如何最终生成与此公钥相关的任何证书或 CSR。
openssl-x509 -new -force_pubkey 看起来很有希望制作证书,但该命令需要私钥,这对我来说没有意义。 用于签名的私钥被锁定在 HSM 中以供稍后签名。
openssl-req 是我最终创建 CSR 所需的内容,但此 API 中没有任何内容可以将此现有公钥或证书与请求相关联。
我觉得我要么遇到了 OpenSSL CLI 的一些限制,要么我缺乏一些关于如何将 CSR 拼凑在一起以供 HSM 签名的主要知识。
您通常通过 PKCS#11 接口访问 HSM。 OpenSSL 为此提供了 engine 或 provider 接口。
您可以使用类似以下内容来创建自签名证书:
$ openssl req -new -x509 -days 365 -subj '/CN=My CA/' -sha256 -config
engine.conf -engine pkcs11 -keyform engine -key slot_0-label_my_key
-out cert.pem
请注意,
-key
选项使用的值取决于您的 HSM。 搜索引擎将为您提供帮助。
如果您在 Linux 上运行此程序,您可能需要安装 OpenSSL pkcs11 引擎(Debian/Ubuntu 及其变体上的
libengine-pkcs11-openssl
)。
顺便说一句,我希望您的顾问指出 OpenSSL 并不适合运营真正的证书颁发机构。 openssl-ca 的手册页甚至有这样的警告。除了有关数据库文件缺乏锁定的警告之外,使用 OpenSSL 不提供可审计的事件跟踪,也不提供角色分离。 这在实验室环境中没问题,但如果您尝试创建值得信赖的 PKI 系统,则不然。