ssl - 为什么我必须从私钥创建证书请求 (CSR)?

标签 ssl openssl certificate private-key csr

我正在尝试通过以下方法创建证书请求 (CSR),我需要在其中提供私钥,我的理解是 CSR 需要/仅包含公钥信息以及有关请求者的其他详细信息,例如公司名称等等。但是如果在创建 CSR 时提取公钥并传递它会抛出以下错误,所以我想知道为什么它需要私钥,虽然我知道私钥也包含公钥,是否只是因为公钥当 key 与 key 对或其他形式的私钥一起使用时, key 是可信的?

openssl genrsa -out ~/domain.com.ssl/domain.com.key 2048

openssl req -new -sha256 -key ~/domain.com.ssl/domain.com.key -out ~/domain.com.ssl/domain.com.csr

尝试使用公钥生成:

openssl rsa -in  domain.com.key.pem -pubout domain.publickey

openssl req -new -sha256 -key domain.publickey -out cert.csr

unable to load Private Key
140258108909384:error:0906D06C:PEM routines:PEM_read_bio:no start line:pem_lib.c:703:Expecting: ANY PRIVATE KEY

最佳答案

证书的重点是在私钥和您之间建立关系,作为证书中的身份。

  • CSR 由私钥签名并由 CA 验证(CSR 中有公钥),因此他知道您拥有该 key 对。
  • 因此他离线验证您是您所说的那个人,拥有该域等,然后他的私钥对其签名。
  • 因此,如果第三方信任他,他就可以相信证书所说的内容,即它的所有者就是它所说的人。
  • 然后,如果他可以使用您的私钥通过 SSL 握手中的另一个签名确定与他交谈的对等方拥有该证书,他就知道对等方就是您。

关于ssl - 为什么我必须从私钥创建证书请求 (CSR)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31954482/

相关文章:

java - 如何启用LTV的时间戳签名并设置不允许的pdf更改?

Azure API 管理不验证证书链

python - Python中是使用http.client还是Socket包?

c - 生成私有(private) RSA 私钥并以编程方式设置密码

c - LibCrypt BN_div 上的 `ctx` 参数有什么用?

ssl - 私有(private) SSL 证书和 CA 的各种问题

node.js - Node.JS 中带有自签名证书的 HTTPS 代理

azure - Azure Cloud Shell 无法识别我的 New-AzureRmWebApp 绑定(bind)代码

ruby - 使用 Net::HTTP 设置 ssl 版本

c - 在 C 中使用 openssl 生成 pem