(这与Security.SE 上的这个问题非常相似。)
作为客户端,您可以通过检查其证书来验证您的 SSL/TLS 连接没有被 MITM 代理(Fiddler 或其他)拦截。这就是拥有证书来验证服务器的全部目的。
您只能允许 Fiddler 查看流量,因为您选择验证其证书。同样,MITM 代理服务器(主要用于企业环境)需要在客户端机器上安装其 CA 证书。在发生这种情况的环境中,客户端无论如何都不能真正控制他们使用的机器:他们将自己的管理委托给控制该代理的任何人。
最终,客户端的唯一责任是检查 (a) SSL/TLS 是否使用以及 (b) 它是否正确使用(使用他们可以信任的证书,用于他们最初打算与之通信的机器)。(有关更多详细信息,请参阅Webmasters.SE 上的更长解释。)
如何验证 ssl 没有通过浏览器中的代理等拦截?
告诉您的用户不要忽略警告。如果在他们的机器上安装了具有匹配 CA 证书的公司代理,他们原则上可以查看证书的详细信息。如果他们不信任他们为此使用的机器,他们应该使用他们自己的,来自一个允许他们不被拦截的网络。
不幸的是,移动设备在检查这些细节方面确实很差,但作为服务器,你无能为力。
检查客户端是否收到与服务器发送的相同的服务器证书的一种方法是要求客户端证书身份验证,这将使客户端使用自己的私钥签署握手(包括服务器证书),因此服务器可以检查签名是否符合预期。这需要更多的基础设施来处理客户端证书(并且您需要向您的用户展示如何使用它们)。
编辑:关于您的评论。
这是 ssl 的缺陷,我们无法检查是否有人在看,它违背了它的全部目的。
并非如此,即使在现实生活中,用户最终也有责任检查它正在与什么/谁交谈。如果您填写了正确的表格以通过代理投票并将投票权委托给某人,或者如果您将您的身份证和送货单交给某人从邮局为您取件,则由您来确保您相信那个人。如果您将您的银行密码提供给某人并且他们为您打电话给您的银行,您的银行将无法判断这是否是您:就它而言,您是通过这些凭据识别的。
只有用户可以检查它是否在与正确的服务器通信:如果不是,则合法服务器没有与用户联系,因此它根本无法发出任何警告表明正在发生错误。
您将永远无法强迫用户从您的服务器与正确的服务器对话,因为您无法控制他们的行为。他们可以将密码提供给他们想要的任何人,而你不会知道。(你最多可以教他们不要这样做。)
您可以做的是防止您的服务器将数据提供给不是您的用户的人。按照现实生活中的类比,这可以通过使用您坚持该人在场的机制来完成(您不允许某人为其他人行事,即使他们出现了另一个人的 ID)。这可以在使用客户端证书时通过 SSL/TLS 完成:只有私钥的持有者可以被认证,没有中间方。(当然,从实际的角度来看,用户必须确保他们不提供他们的私钥。)