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