为什么我需要从私钥创建证书请求(CSR)?

3
我试图通过下面的方法创建证书请求(CSR),在这个方法中,我需要提供私钥。我的理解是,CSR 只需要包含有关请求者的其他详细信息,如公司名称等公钥信息。但如果在创建 CSR 时提取公钥并传递它,就会出现以下错误。因此,我想知道为什么需要私钥,尽管我理解私钥也包含公钥。是因为只有在形成密钥对的情况下,公钥才是可信的吗?
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

也许你可以看一下这个。https://stackoverflow.com/questions/56449727/why-private-key-is-used-amidst-creation-of-csr - CafeBaby
也许你可以查看一下这个RFC2986 - CafeBaby
1个回答

7
证书的整个意义在于建立私钥和证书中所标识的身份(即您)之间的关系。
CSR由私钥签名并由CA进行验证(使用CSR中的公钥),因此他知道您拥有该密钥对。
因此,他将离线验证您是否是所说的人,拥有该域等,然后使用他的私钥对其进行签名。
然后,如果第三方信任他,他可以相信证书所说的内容,即其所有者是谁。
然后,如果他可以通过使用您的私钥在SSL握手期间进行的另一个签名来确认与其通信的同行拥有该证书,则他知道该同行就是您。

1
请仔细阅读我在这里写的内容。我明确表示“CSR由私钥签名”,并且我也解释了原因:“这样他就知道你拥有那个密钥对”。不要让我再次确认它。我只能重复一遍。你最后一句话根本没有意义。CSR生成包括签名步骤,其中涉及私钥。而且我已经回答了这个问题。 - user207421
1
如果我对签名的理解是这样的,那么要签署消息/CSR,您需要创建其哈希值,然后使用您的私钥加密哈希值。如果CSR已加密,则我想知道CA如何知道我的公钥以解密我的CSR内容,因为我除了通过CSR之外没有单独发送公钥?或者只有CSR的一部分被签名,而公钥则没有被签名?请澄清。 - user1370642
2
@user1370642,您对签名的理解有一些偏差。CSR包括您的公钥和身份信息明文,以及使用您的私钥生成的签名。CA使用明文版本的您的公钥来验证(而不是解密)您的签名。这就是签名通常的工作方式:将签名添加到签名数据中,而不是发送替代数据。 - Gordon Davisson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接