为什么我的证书签名请求应该由我的私钥签名?
即使我从别人的公钥中获得了一个伪造的证书,那也是没有用的,因为在 SSL 中,通信只能通过会话密钥进行。只有当我拥有用于获取证书的公钥的相应私钥时,我才能使用该会话密钥,因为客户端(或另一方)将发送使用公钥加密的会话密钥,并且只有拥有相应的私钥才能解密。
那么需要向 CA 证明我拥有我申请证书的公钥的私钥吗?
为什么我的证书签名请求应该由我的私钥签名?
即使我从别人的公钥中获得了一个伪造的证书,那也是没有用的,因为在 SSL 中,通信只能通过会话密钥进行。只有当我拥有用于获取证书的公钥的相应私钥时,我才能使用该会话密钥,因为客户端(或另一方)将发送使用公钥加密的会话密钥,并且只有拥有相应的私钥才能解密。
那么需要向 CA 证明我拥有我申请证书的公钥的私钥吗?
接受未签名的签名请求不会使 SSL 无效。但是证书不仅仅用于 SSL。
除了Jonathan Gray 已经引用的RFC 2986中的原因之外,请考虑一个事实,即证书不仅仅关联一个专有名称和一个公钥。它还关联额外的信息(例如人名和地址)。如果 Eve 可以让 CA 签署包含(Eve 的公钥,DN= ,CN=“Kitten Killers, Inc.”)的证书,那么 CA 就为声明“Kitten Killers Inc.”提供了合法性。由于必须对 CSR 进行签名,因此只有首先可以获得证书的实体才能选择它想要关联的通用名称。acme.com
acme.com
acme.com
我敢肯定,如果你足够努力,你可以找到官方的解释:
证书请求上的签名可防止实体使用另一方的公钥请求证书。这样的攻击将赋予实体假装是另一方签名的任何消息的发起者的小能力。仅当实体不知道正在签名的消息并且消息的签名部分不能识别签名者时,这种攻击才有意义。当然,实体仍然无法解密发送给对方的消息。
除了对请求进行身份验证之外,签名还可以确保 CSR 不被篡改。这有助于确保不会意外或恶意地创建和潜在使用具有无效数据的证书。