最近我安装了fiddler,它允许我从任何浏览器查看(解密)我的Ssl请求。
虽然不合法,但有些防火墙还允许安装一些根证书,然后防火墙可以监控和跟踪https协议。
我们通过ssl提供敏感信息,以及如何通过代理或fiddler工具检查和防止此类拦截。
有没有JavaScript API?应该有一些东西,我可以检查页面加载。
$( function() {
if(!isSSLValid())
{
alert('Your traffic is monitored...');
location.href = '/SSLInstructions.html';
}
});
将其视为移动或标签浏览器,在iOS中无法查看证书,只能查看图标。
答案 0 :(得分:2)
(这与this question on Security.SE非常相似。)
作为客户端,您可以通过检查其证书来验证您的SSL / TLS连接是否未被MITM代理(Fiddler或其他)拦截。这就是拥有证书来验证服务器的全部目的。
您只能让Fiddler查看流量,因为您选择验证其证书。同样,MITM代理服务器(主要用于企业环境)需要在客户端计算机上安装其CA证书。在发生这种情况的环境中,客户端并不真正控制他们使用的机器:他们将管理委托给控制该代理的任何人。
最终由客户自行负责检查(a)是否使用了SSL / TLS,以及(b)是否正确使用(首先是他们可以信任的证书用于他们打算与之通信的机器) 。 (有关详细信息,请参阅this longer explanation on Webmasters.SE。)
如何验证ssl是否未在浏览器中通过代理等拦截?
告诉您的用户不要忽略警告。如果公司代理在其计算机上安装了匹配的CA证书,则原则上可以查看证书的详细信息。如果他们不相信他们正在使用的机器,他们应该使用他们自己的机器,从一个允许他们不被截获的网络。
不幸的是,移动设备确实很难检查这些细节,但作为服务器,你无能为力。
检查客户端是否收到与服务器发送的服务器证书相同的服务器证书的一种方法是要求客户端证书身份验证,这将使客户端使用自己的私钥签署握手(包括服务器证书),因此服务器可以检查签名是否符合预期。这需要更多的基础设施来处理客户端证书(并且您需要向用户展示如何使用它们)。
编辑:关于您的评论。
这是ssl中的缺陷,我们无法检查是否有人正在观看 与否,它完全违背了它的目的。
不是真的,即使在现实生活中,最终也是用户有责任检查它与谁交谈的对象。如果您填写正确的表格以通过代理投票并将此投票权委托给某人,或者如果您将您的身份证和交付单交给某人从邮局为您领取包裹,则由您决定是否确保相信那个人。如果您将银行密码提供给某人并且他们为您的银行打电话,您的银行无法告知您是否是您:就您所关注的而言,您已通过这些凭据进行识别。
只有用户能够检查它是否正在与正确的服务器通信:如果没有,则合法服务器不与用户联系,因此它根本无法发出任何错误发生的警告。
您永远无法强迫用户通过服务器与正确的服务器通信,因为您无法控制他们的操作。他们可以将密码提供给他们想要的任何人,你不会知道。 (你可以教他们不要这样做,充其量。)
您可以做的是阻止您的服务器向非您的用户提供数据。按照现实生活中的类比,这可以通过使用你坚持要在场的人的机制来完成(你不允许某人为别人行事,即使他们出现在他人的身份证上)。使用客户端证书时,可以使用SSL / TLS完成此操作:只能验证私钥的持有者,无需中间方。 (当然,从实际的角度来看,用户必须确保他们不提供私钥。)