首先,第三步中缺少一些步骤。第三步实际发生的是:
- 客户端验证证书
- 客户端和服务器来回发送一些消息,从而协商什么样的消息密钥他们都可以使用的加密
- 客户端创建一个密钥对于该加密算法,用服务器的公钥对秘密密钥进行加密,并将加密后的秘密密钥发送到服务器。
- 服务器现在可以使用其私钥解密密钥。
- 客户端和服务器现在就密钥算法达成一致,并且共享密钥。所有通信现在都使用共享密钥进行加密和解密。
- 客户端使用密钥加密他们的凭据......
其原因是双重的。第一的,公钥加密的数学比秘密密钥加密的数学昂贵得多。这个想法是只进行一次昂贵的数学计算,以实现共享秘密的交换。其次,客户端知道服务器的公钥,但客户端可能连公钥都没有,那么服务器如何向它发送秘密消息呢?这就是为什么他们必须就共享密钥达成一致。
无论如何,继续你的问题:
该服务在哪里保存其私钥?
在 Windows 上,它位于操作系统提供的证书存储中。在其他操作系统上,我不知道。
为什么需要证书?
假设您想用信用卡购买我的割草机,但您担心我实际上可能是个骗子。您想知道我的真实姓名,以便在我开始用您的卡收取维加斯之旅费用时您可以起诉我。
因此,当我们进行交易时,我向您展示一张纸,上面写着“Eric Lippert 声称这张纸的所有者是 Eric Lippert,签名为 Eric Lippert”。你相信我吗?如果您已经信任埃里克·利珀特,那么您就不需要这张纸,如果您不信任埃里克·利珀特,那么这张纸就不会建立信任。这是一个“自签名证书”。
现在,如果我向您展示一张纸,上面写着“VeriSign 公司声称这张纸的所有者是 Eric Lippert,由 VeriSign 签名”,那么问题是:您是否相信 VeriSign 已验证我的身份?如果您这样做,则这证明与您交谈的人就是他们所声称的那个人。
这就是证书的目的。它确定特定的公钥确实与特定的组织相关联,因为它是由相互信任的第三方签署叫做认证机构.
当您使用信用卡在线购买商品时,您可能会相信该网站只会对该卡进行授权收费。该证书验证您要用于加密的公钥确实是该网站的公钥,而不是某些邪恶黑客的公钥。
但是带有公钥的证书是公开的,难道有人不能抢到证书并冒充服务器吗?
是的,但这对他们没有帮助,除非他们窃取了私钥,而私钥是私有的。拥有他人证书的人不能解密使用公钥加密的消息,所以他们将无法与客户端进行密钥交换!即使他们设法欺骗客户端,他们得到的只是用客户端选择的密钥编码的比特流,如果没有证书的私有部分,攻击者就无法获得该密钥。
这意味着:如果我允许访问我的私钥,那么有人就可以冒充我,对吧?
是的。整个系统的安全性取决于私钥的私密性。这就是为什么它被称为私钥.如果攻击者获得了您的私钥,那么他们就可以随意冒充您,因此保守秘密,保证安全。如果您的密钥遭到泄露,可以通过一种机制撤销证书,但通常损害已经造成。