【问题标题】:ERR_INSECURE_RESPONSE handing tips in JavascriptJavascript 中的 ERR_INSECURE_RESPONSE 处理技巧
【发布时间】:2015-05-05 14:40:42
【问题描述】:

我们的 Web 应用程序有很多 ajax 调用,而且都是 https 请求(我们的 IT 团队要求),是的,我们已经开放了标头以允许跨域。但问题是我们的所有应用程序都在内部使用了自己的自定义证书,所以基本上我在调用 ajax 时会出错:

加载资源失败:net::ERR_INSECURE_RESPONSE

如果我在浏览器中打开 URL 并接受证书,ajax 调用就可以正常工作。所以我的问题是,有没有办法通过 Javascript 来处理这个问题?或者添加受信任的证书会解决这个问题吗?此外,即使我们添加了受信任的证书,我还会再次面临 ajax 的任何问题吗?

注意:我们正在 chrome 浏览器中测试所有这些

【问题讨论】:

    标签: javascript jquery ajax ssl


    【解决方案1】:

    是的,将证书添加到用户的受信任证书列表中可以解决您的问题。只要您的服务器正确设置为服务器 CORS(根据您接受证书后的成功,看起来确实如此),证书就是您唯一的问题。

    HTTPS 提供两个安全优势:

    1. 您知道您和正在与之交谈的任何人之间的通信通道是安全的(例如,当 Alice 与 Bob 交谈时,她知道没有其他人可以监听)
    2. 您知道 您正在与谁交谈确实是他们声称的身份(例如,当 Alice 与 bob.com 交谈时,她知道这确实是她所知道的服务器 bob.com 而不是冒名顶替者)

    第一个好处是自动的。它由加密协议保证并且不能被剥离(除非对通常很快修复的安全漏洞进行非常复杂的攻击)。

    第二个好处并不是严格意义上的技术好处:这是一个信任的问题。服务器使用证书将其公钥(授予第一个安全组件)与自己的身份相关联。这些公钥证书由称为证书颁发机构 (CA) 的用户信任机构签署。

    当您尝试连接到bob.com 时,该站点会为您提供一个公钥来执行安全通信。你怀疑并说:“当然,这个公钥可以让我安全地与你交谈,但我怎么知道你是真的bob.com?”然后服务器会给你一个 CA 签名的证书,上面写着:

    我们,VeriSign 证书颁发机构,在我们的调查中广受信任,在此证明以下公钥确实属于 bob.com

    公钥:ZGdlZGhydGhyaHJ0eWp5cmo...

    经过验证的签名,

    威瑞信

    当且仅当它们可靠地验证公钥确实属于域名时,许多主要的证书颁发机构(被操作系统和浏览器)广泛信任才能颁发签名证书。由于您的操作系统已经信任这些签名,因此我们无需任何确认即可使用它们。

    当您使用自签名证书时,没有受信任的 CA 验证您的证书确实属于您的域名。任何人都可以制作一份说明:

    嘿,伙计,这 100% 绝对是 bob.com 的公钥:

    公钥:WGdoZmpodHlqa2p1aXl1eWk...

    相信我们,写这篇笔记的人,好吗?我们绝对确定这是关键。写这篇笔记的人是运行bob.com 的人。我们承诺。

    签名,

    写这篇笔记的人

    这上面没有受信任的签名。用户必须决定是否愿意接受证书证明公钥确实属于bob.com

    做出有意义的决定是一个困难的过程——您需要检查证书并在某处找到公钥的预先存在的可信记录(或联系站点管理员或服务台代表)。实际上,您需要让您对证书的信任来自某处,因为它不是来自主要证书颁发机构的可信签名。

    让 JavaScript 自动做出这种信任决定是没有意义的。重点是用户必须决定证书是否可信,然后对系统的证书存储进行适当的修改。

    可以假设为 Ajax 请求完成,但它不会很漂亮。您需要向用户显示一个浏览器 UI 屏幕,询问用户是否要信任脚本尝试访问的任何域的自签名证书。除了对浏览体验造成极大破坏之外,这可能会造成危险的混乱:如果我在 example.com 上,突然(由于我不知道的脚本的操作)我被要求信任证书对于bob.com,我可能会纯粹基于我对example.com的信任而接受它。

    要么将证书添加到您系统的受信任证书列表中,要么让您的系统已经信任的 CA 对其进行签名。

    【讨论】:

    • 有没有办法检测原因何时是不安全的响应,以便我可以指导用户在适当的站点信任证书?获得开箱即用的可信证书对我来说并不总是一种选择,所以我需要在自己的 JS 中检测到这一点。
    • @ehdv XHR API 不太可能提供一种方法来区分证书错误和其他类型的网络错误。我认为你最好的选择是简单地假设错误是由证书错误引起的,然后从那里开始。 (如果站点有不安全的资源,您也可以尝试获取该资源,验证站点是否已启动并增加对 HTTPS 问题的信心。)
    【解决方案2】:

    如果所有的 AJAX 调用都在同一个域中进行,添加可信证书就足够了,如果它们不属于同一个域,使用 JSONP 通过 AJAX 获取数据就不会出现错误。

    如果您想了解 JSONP,这里有一个有用的链接:http://www.sitepoint.com/jsonp-examples/

    【讨论】:

      猜你喜欢
      • 2011-08-30
      • 2016-09-02
      • 1970-01-01
      • 1970-01-01
      • 2013-10-27
      • 2018-05-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多