openssl - 如何从 key 对的现有公钥创建证书签名请求 (CSR)(假设私钥位于其他地方的安全位置)?

标签 openssl

我正在使用 OpenSSL。 openSSL的所有引用资料都集中在以下两个创建CSR的命令;一个要求您输入一个已经存在的私钥(并派生公钥???),第二个将创建一个新的 key 对。我想使用我的公钥而不是创建新的公钥。

创建 CSR 和私钥:

openssl req -newkey rsa:2048 -keyout my.key -out my.csr

从现有私钥创建 CSR:

openssl req -key my.key -out my.csr

对于第一个选项,我不明白为什么您需要私钥作为命令中的参数。我看到很多网站都说CSR是加密的,但事实似乎并非如此。如果将 CSR 放入 CSR 解码器(即 http://www.sslshopper.com/csr-decoder.html ),则可以解析它;因此我唯一的结论是它只是编码而不是加密。

为什么这些命令中要输入私钥?私钥是如何使用的?如果它正在加密某些东西,那么它加密的是什么?

如果没有使用,有人可以告诉我如何仅使用我的 key 对中的公钥创建 CSR 吗?

提前致谢

最佳答案

CSR 使用私钥进行签名,以防止在传输到 CA 的过程中被篡改。因此,您需要私钥来创建一个。

可以创建没有签名的 CSR,但这种结构并不常见,而且 openssl 二进制文件本身没有创建它们的规定。

当使用您首先列出的 openssl 命令生成新的 CSR+ key 对时,它不会加密 CSR(因为这不是理想的行为。CSR 是您提交的公共(public)数据,而不是 secret 信息),而是加密私有(private)数据关键。

关于openssl - 如何从 key 对的现有公钥创建证书签名请求 (CSR)(假设私钥位于其他地方的安全位置)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14617306/

相关文章:

c++ - 在 GCC 中链接库

php - 在 Qt C++ 中使用 openssl 解码和编码文本

ssl - 使用 CloudFlare 时不显示自定义 SSL

node.js - NodeJS,私有(private) ca 与 express.js 的结合使用

c - 我如何使用 wget 来获取公钥?

c++ - 将 ECDHE TLS 与 Boost ASIO 结合使用

Windows 在安装由 openssl 生成的 p12 key 时要求输入 p12 密码

c - 无法使用 Cygwin 和 OpenSSL 计算 CMAC

php - C++ 和 PHP 中的 OpenSSL 不一致

c - 如何使用 openSSL api 将公钥转换为字符串?