我的问题是关于ssl中的证书,但我认为这些问题应该适用于所有证书。为了清楚起见,我已经包含了SSL程序。
在SSL中,这是我理解的程序:
1)客户端
- 发送支持的加密算法
- 发送客户端随机数
2)服务器
- 选择(和发送)a
- 对称算法
- 公钥算法
- MAC算法
- 发送它的证书
- 发送服务器nonce
3)客户
- 验证证书
- 提取公钥
- 生成预主密钥(pms)
- 用服务器公钥加密并发送
4)客户端和服务器
- 从PMS和nonce计算主分泌(MS)
- PMS切片生成两个加密和两个mac密钥
5)客户
- 发送所有握手的mac(以确保它们以前不是修改)
6)服务器
- 发送所有握手的mac
题
是什么阻止了中间人的攻击发生在第二步?为什么中间的人不能说trudy,捕获服务器发送的证书并更改其中的公钥(具有私钥的东西)。
我假设证书以某种方式加密。
但是,服务器无法加密证书,因为客户端尚未拥有公钥。当服务器从权限(如veri-sign)获取密钥时,密钥是否会使用verisign的公钥预先包含?我认为这应该有效,因为所有Web浏览器都应该拥有大多数权限的公钥。