我的问题是关于SSL证书,但我认为这些问题应该适用于所有证书。出于清晰起见,我已经包括了SSL过程。
在SSL中,这是我理解的过程:
1)客户端
- 发送支持的加密算法
- 发送客户端随机数
- 服务器
- 选择(并发送)对称算法
- 公共密钥算法
- MAC算法
- 发送自己的证书
- 发送服务器随机数
- 客户端
- 验证证书
- 提取公钥
- 生成一个预主密钥(PMS)
- 使用服务器的公钥进行加密并发送
- 客户端和服务器
- 从PMS和随机数计算主密钥(MS)
- PMS切片以生成两个加密和两个MAC密钥
- 客户端
- 发送所有握手的mac(以确保它们没有被修改过)
- 服务器
- 发送所有握手的mac
问题
在第二步骤中,阻止了中间人攻击的发生是什么? 为什么中间人攻击者无法捕获服务器发送的证书并更改其中的公钥(到它拥有私钥的某个值)。
我假设证书以某种方式被加密。
然而,由于客户端尚未拥有公钥,服务器无法加密证书。当服务器从权威机构(如VeriSign)获取密钥时,该密钥是否会使用VeriSign的公钥进行预加密呢?我认为这应该可以实现,因为所有Web浏览器都应该拥有大多数权威机构的公钥。