我已经阅读了大量与此问题相关的文档,但我仍然无法将所有部分放在一起,所以我想问几个问题。
首先,我将简要描述我所理解的身份验证过程,因为我可能在这方面犯了错误:客户端启动连接,服务器使用公钥、一些元数据和数字签名的组合来响应受信任的权威。然后客户端决定她是否信任服务器,用公钥加密一些随机会话密钥并将其发回。此会话密钥只能使用存储在服务器上的私钥解密。服务器执行此操作,然后 HTTPS 会话开始。
所以,如果我在上面是正确的,那么问题是在这种情况下中间人攻击是如何发生的?我的意思是,即使有人用公钥拦截了服务器(例如 www.server.com)的响应,并且有办法让我认为他是 www.server.com,他仍然无法解密我的会话密钥没有私钥。
说到相互身份验证,是否完全与服务器对客户端身份的信任有关?我的意思是,客户端已经可以确定她正在与正确的服务器通信,但是现在服务器想要找出客户端是谁,对吗?
最后一个问题是关于相互认证的替代方案。如果我在所描述的情况下充当客户端,如果我在 SSL 会话建立后在 HTTP 标头中发送登录名/密码怎么办?正如我所看到的,无法拦截此信息,因为连接已经安全,服务器可以依赖它来识别我。我错了吗?与相互身份验证相比,这种方法的缺点是什么(只有安全问题很重要,而不是实现复杂性)?