Javascript 检查客户端是否已接受安全异常

Javascript 检查客户端是否已接受安全异常,javascript,jquery,ssl,https,certificate,Javascript,Jquery,Ssl,Https,Certificate,我们有一些用于内部测试/开发的登台环境,它们不使用“真正的”SSL证书。老实说,我对细节有点模糊,但底线是当在这些环境中访问子域时,浏览器会提示您添加一个安全异常,类似于“您已要求Firefox安全连接到example.com,但我们无法确认您的连接是否安全”: 是否可以检测到这一点,例如,通过向相关url发出请求并处理错误代码/可能返回的任何其他相关信息?我找不到任何规范来说明浏览器如何处理此问题 编辑: 我不介意登录页本身出现的错误,用户很清楚。然而,有些请求在后台会像这样失败(从不同的子

我们有一些用于内部测试/开发的登台环境,它们不使用“真正的”SSL证书。老实说,我对细节有点模糊,但底线是当在这些环境中访问子域时,浏览器会提示您添加一个安全异常,类似于“您已要求Firefox安全连接到example.com,但我们无法确认您的连接是否安全”:

是否可以检测到这一点,例如,通过向相关url发出请求并处理错误代码/可能返回的任何其他相关信息?我找不到任何规范来说明浏览器如何处理此问题

编辑: 我不介意登录页本身出现的错误,用户很清楚。然而,有些请求在后台会像这样失败(从不同的子域中提取css/js/其他静态内容),但您不知道它们会失败,除非您转到firebug中的“网络”面板并在“新建”选项卡中打开它并看到错误

这样做的目的不是要绕过这个问题,而是要检测问题并说“嘿,这些请求失败了,你可以直接转到这些URL:[一堆链接]”


接受(或拒绝)只会修改客户端浏览器中的行为(每个浏览器以不同的方式)。它不向服务器确认任何内容,并且页面尚未加载,因此,没有机会捕获该事件。

检查证书的有效性完全由客户端负责。只有它才能知道它必须使用HTTPS,并且必须针对对该主机有效的证书使用HTTPS

如果用户不进行这些检查,因此将自己置于可能发生MITM攻击的位置,那么您就不一定能够了解它。活跃的MITM攻击者可以执行您用来检查用户是否正确操作的任务,但合法用户甚至可能不知道。这非常类似于想要:只要不存在降低连接级别的活动MITM攻击,它就可以工作

(有一个例外,以确保客户端看到与您相同的握手:在使用客户端证书时。在这种情况下,您至少知道ha使用证书进行身份验证的客户端会看到您的服务器证书,而不是MITM证书,因为握手结束时的签名。这并不是您真正想要的不过,我正在寻找答案。)

JavaScript机制通常不允许您自己检查证书。也就是说,对不受信任的网站(带有此类警告)的XHR请求将以某种方式失败(通常通过异常):这可能是一种检测后台请求是否可以访问登录页以外的其他页面的方法(尽管您肯定会遇到关于同一原产地政策的问题)


与使用自签名证书进行测试/开发相比,如果部署测试证书颁发机构(CA),您将处于更好的位置。有许多工具可以帮助您做到这一点(使用哪种工具取决于您需要的证书数量)。然后,您必须将自己的CA证书导入这些浏览器(或其他客户端),但总体测试将更为现实。

我添加了一些应该首先提到的细节。基本上,相关页面工作正常,但页面上的某些请求会像这样失败,除非安全异常被禁用“预添加”支持我的观点。这是一种浏览器行为。要么使用有效的CA证书,要么停止混合来自安全和不安全位置(到客户端)的内容,只有与证书相关的域将被视为安全域,从其他域/子域加载静态内容将随时引发安全问题(应该!)