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