只有带有 openssl 的公钥的 CSR

信息安全 证书 公钥基础设施 openssl RSA
2021-09-08 03:25:39

所以我一直在做我的研究,并没有发现任何足够具体到我的问题的东西。正如问题标题所述,我想只用公钥制作一个 CSR。我能够做的是使用我选择的信息以及一个新的密钥对生成一个 CSR。然后使用类似这样的东西来强制它在制作证书时使用我想要的公钥。

openssl x509 -req -in mycsr.pem -force_pubkey mypubkey.pem -CA dumyCA.pem -CAkey -dumyCA.pem -out mycert.pem

在此之后,我获取输出的证书并更改其属性以将其与私钥相关联。这一切都很好。这样做的问题是,如果我要获取所述 csr,并将其提交给 CA,他们将返回给我一个证书,该证书使用生成 csr 时生成的密钥。因此我的问题。

编辑:所以我有一个密钥对,但我的私钥位于没有导出功能的 HSM 模块上。我能够获得公钥的 .pem 文件。在使用我给出的命令制作证书后,我通过一个将其与私钥相关联的程序运行它。所以我的新问题是,使用 openssl API 我可以创建自己的 csr 吗?所以我可以用私钥对其进行签名,而不必将其保存在文件中,并将其与我拥有的公钥相关联。

2个回答

证书签名请求,由命令生成:

openssl req -out CSR.csr -new -newkey rsa:2048 -nodes -keyout privateKey.key

将包括您的公钥。根据 PKI 流程,这是强制性的。包含您的实体信息和公钥的 CSR 将发送到您喜欢的任何证书颁发机构以请求证书(因此是 CSR 名称)。CSR 使用链接到嵌入式公钥的私钥进行签名。

CA 在评估您的身份后,基本上会签署 CSR 以为您创建有效的证书。这是您将发送给客户的证书,例如当他们连接到您的网站时。

您的网络服务器将使用您文件中的私钥privateKey.key来解密发送给它的消息。这个私钥永远不应该离开服务器。

您可以查看最常见的 openSSL 命令以获取更多信息。

不幸的是,创建证书签名请求实际上需要一种使用私钥的方法。当您谈论 HSM 时,这通常可用作 OpenSSL 引擎。

例如,Yubico 有关于为受 Yubikey 保护的密钥创建证书请求的文档。

本质上,您必须像这样调用 openssl req:

openssl req -new ... -config ssl.conf -engine engine_name -keyform engine -key key_name

您需要创建一个ssl.conf混乱的配置文件(至少对于 PKCS#11),例如

openssl_conf = openssl_init

[openssl_init]
engines = engine_section

[engine_section]
pkcs11 = pkcs11_section

[pkcs11_section]
dynamic_path = /usr/lib/ssl/engines/libpkcs11.so
MODULE_PATH = /usr/lib/opensc-pkcs11.so

而且您必须弄清楚如何key_name为特定引擎指定。如果您的 HSM 模块没有 OpenSSL 引擎,那么您的运气不好。:-(