为什么在创建CSR时会使用私钥?

时间:2019-06-04 18:52:56

标签: certificate ssl-certificate

主要创建CSR来创建具有可信公钥的证书。

在创建CSR之前,

我们创建一个私钥

openssl genrsa -out key.pem 1024

,然后使用该私钥(key.pem)创建CSR(req.pem)请求。

openssl req -new -key key.pem -out req.pem

编辑:

我看到一个Docker引擎安装了与CSR一起使用的根证书,服务器证书和私有证书

enter image description here

在提交CSR时提供私钥(key.pem作为输入)的确切目的是什么?因为证书应该使用父私钥签名

在创建CSR期间是否需要私钥(key.pem)来生成相应的公钥?

私钥(key.pem)是否用于加密CSR,并将生成的签名附加到CSR?

1 个答案:

答案 0 :(得分:2)

PKCS#10认证请求(RFC 2986)的结构大致描述如下:

Request:
    Info:
        Version
        Name
        PublicKey
        Attributes
    SignatureAlgorithmIdentifier
    Signature

属性是请求的属性,如果可能是您要请求的结果证书的属性,则为该属性。

CA可以选择多少或更少的CSR。例如,StartSSL仅读取公共密钥信息,而丢弃其余的CSR-他们需要的其他一切都是基于您从Web UI和帐户状态发出的请求。

通常,CA不会忽略公钥值,因为如果他们为您断言了新的密钥对,则需要弄清楚应该如何获得私钥。因此,公钥部分必须存在且正确。 OpenSSL的命令可以通过读取私钥来获取公钥值,然后将其嵌入到CSR中。

需要私钥的第二个原因是对请求进行签名。我会断言,签署请求的主要原因是在此阶段强行/强烈建议您保存私钥,因此您不会在几分钟后返回“请撤消此新证书,我已经丢失了私钥”请求。 RFC(也)说:

  

注2-认证请求上的签名可以防止      实体使用另一方的公钥请求证书。      此类攻击将使实体具有较小的假装能力      是对方签名的任何消息的始发者。这个      仅当实体不知道消息时,攻击才有意义      正在签名,并且消息的签名部分无法识别      签名者。该实体仍将无法解密消息      当然是给对方的。