【问题标题】:Checking if a security exception has been accepted by the client检查客户端是否已接受安全异常
【发布时间】:2012-05-19 14:16:37
【问题描述】:

我们有一些不使用“真实”SSL 证书的内部测试/开发暂存环境。老实说,我对细节有点模糊,但最重要的是,当访问这些环境中的子域时,浏览器会提示您按照 “您已要求 Firefox 安全连接到示例.com,但我们无法确认您的连接是否安全”:

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

编辑:

我不介意着陆页本身发生的错误,用户很清楚。然而,一些请求在后台失败(从不同的子域中提取 css/js/其他静态内容)但你不知道它们会失败,除非你去 firebug 中的网络面板并在新选项卡中打开它并查看错误.. .

目的不是为了规避这一点,而是为了检测问题并说类似 “嘿,这些请求失败,您可以通过直接访问这些 url 添加安全异常:[bunch of links]”

【问题讨论】:

    标签: javascript jquery ssl https certificate


    【解决方案1】:

    检查证书的有效性完全是客户的责任。只有它可以知道它必须使用 HTTPS,并且它必须针对对该主机有效的证书使用它。

    如果用户不进行这些检查,因此将自己置于可能发生 MITM 攻击的位置,您不一定能够知道它。活跃的 MITM 攻击者可以回答执行您用来检查用户是否正确执行任务的任务,但合法用户甚至可能不知道它。这与想要use redirections from http:// to https:// 非常相似:只要没有活动的MITM 攻击降级连接,它就可以工作。

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

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

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

    【讨论】:

      【解决方案2】:

      没有。

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

      【讨论】:

      • 我添加了一些应该首先提到的细节。基本上,有问题的页面可以正常工作,但是 页面上的一些请求会像这样失败,除非安全异常是“预先添加的”
      • 坚持我的观点。这是一种浏览器行为。要么您使用有效的 CA 证书,要么停止混合来自安全和不安全位置(到客户端)的内容,只有与证书相关的域将被视为安全,并且从其他域/子域加载静态内容将随时引发安全问题(它应该!)
      猜你喜欢
      • 1970-01-01
      • 2023-01-03
      • 2015-08-04
      • 2018-06-11
      • 1970-01-01
      • 1970-01-01
      • 2013-07-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多