如何验证ssl没有在浏览器中通过代理等进行拦截

How to verify that ssl was not intercepted via proxy etc in browser?

本文关键字:代理 浏览器 何验证 验证 ssl      更新时间:2023-11-23

最近我安装了fiddler,它确实允许我从任何浏览器查看(解密)我的Ssl请求。

虽然它不合法,但一些防火墙也允许安装一些根证书,然后防火墙可以监控和跟踪https协议。

我们通过ssl提供敏感信息,以及如何通过代理或fiddler类工具检查和防止此类拦截。

是否有JavaScript API?应该有一些东西,我可以在页面加载时查看。

$( function() {
    if(!isSSLValid())
    {
        alert('Your traffic is monitored...');
        location.href = '/SSLInstructions.html';
    }
});

可以将其视为移动或选项卡浏览器,在iOS中无法查看证书,只有一个图标。

(这与Security.SE上的这个问题非常相似。)

作为客户端,您可以通过检查其证书来验证您的SSL/TLS连接是否未被MITM代理(Fiddler或其他)拦截。这就是使用证书对服务器进行身份验证的全部目的。

您只能允许Fiddler查看流量,因为您选择验证其证书。类似地,MITM代理服务器(主要用于公司环境)需要在客户端机器上安装其CA证书。在发生这种情况的环境中,客户端并不能真正控制他们使用的机器:他们将自己的管理委托给控制该代理的人。

最终,客户端的唯一责任是检查(a)SSL/TLS是否使用以及(b)是否正确使用(使用他们可以信任的证书作为他们最初想要通信的机器)。(有关更多详细信息,请参阅Webmasters.SE上的详细说明。)

如何验证ssl没有被浏览器中的代理等截获?

告诉用户不要忽略警告。如果他们的机器上安装了一个具有匹配CA证书的公司代理,原则上他们可以查看证书的详细信息。如果他们不信任他们为此使用的机器,他们应该使用自己的机器,通过一个不被拦截的网络。

不幸的是,移动设备确实很难检查这些细节,但作为服务器,你无能为力

检查客户端是否接收到与服务器发送的服务器证书相同的服务器证书的一种方法是要求客户端证书身份验证,这将使客户端使用自己的私钥对握手(包括服务器证书)进行签名,这样服务器就可以检查签名是否符合预期。这需要更多的基础设施来处理客户端证书(您需要向用户展示如何使用它们)。

编辑:关于您的评论。

这是ssl中的缺陷,我们无法检查是否有人在观看

事实并非如此,用户最终总是有责任检查它在和什么/谁说话,即使在现实生活中也是如此。如果你填写了正确的表格,通过代理人投票,并将投票权委托给某人,或者如果你把身份证和快递单交给某人从邮局为你取包裹,你就要确保你信任那个人。如果你把你的银行密码给了别人,他们帮你打电话给你的银行,你的银行就无法判断是不是你:就它而言,你是通过这些凭据识别的。

只有用户才能检查是否与正确的服务器进行了对话:如果没有,则合法服务器不会与用户联系,因此它根本无法发出任何错误发生的警告。

你永远无法强迫用户从你的服务器上与正确的服务器对话,因为你无法控制他们的行为。他们可以将密码提供给任何他们想要的人,你不会知道。(你最多可以教他们不要这样做。)

您可以做的是防止服务器将数据提供给非您的用户。根据现实生活中的类比,这可以通过使用你坚持让对方在场的机制来实现(你不允许某人代表他人行事,即使他们带着对方的身份证出现)。当使用客户端证书时,可以使用SSL/TLS来实现这一点:只有私钥持有者才能进行身份验证,而没有中间方。(当然,从实用的角度来看,用户必须确保他们不会提供私钥。)