ERR_INSECURE_RESPONSE在Javascript中处理提示

时间:2015-03-04 14:44:45

标签: javascript jquery ajax ssl

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

  

无法加载资源:net :: ERR_INSECURE_RESPONSE

如果我在浏览器中打开URL并接受证书,则ajax调用正常。所以我的问题是,有没有办法通过Javascript处理这个?或者添加可信证书会解决此问题?即使在我们添加可信证书之后,我还会在ajax中遇到任何问题吗?

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

2 个答案:

答案 0 :(得分:23)

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

HTTPS提供两个安全优势:

  1. 您知道您和您正在交谈的任何人之间的通信渠道是安全的(例如,当Alice与Bob交谈时,她知道没有其他人可以收听)
  2. 您知道您与交谈的人确实是他们声称的人(例如,当Alice与bob.com交谈时,她知道它是谁她知道的服务器是bob.com,而不是冒名顶替者)
  3. 第一个好处是自动的。它由加密协议保证,不能被剥离(除非通常非常快速地修复安全漏洞的非常复杂的攻击)。

    第二个好处不仅仅是技术上的好处:它是信任的问题。服务器使用证书将其公钥(授予第一个安全组件)与其自己的标识链接起来。这些公钥证书由称为证书颁发机构(CA)的用户信任机构签署。

    当您尝试连接到bob.com时,该网站会为您提供执行安全通信的公钥。你怀疑并说,"当然,这张公钥可以让我安全地与你交谈,但我怎么知道你真的 bob.com ?"然后,服务器会为您提供 CA签名证书,其中包含:

      

    我们,VeriSign证书颁发机构,在我们的调查中得到广泛信任,特此证明以下公钥真正属于bob.com

         

    公钥:ZGdlZGhydGhyaHJ0eWp5cmo...

         

    可验证签名,

         

    VeriSign公司

    当且仅当他们已经可靠地验证公钥确实属于域名时,才有许多主要的证书颁发机构(通过操作系统和浏览器)广泛信任签发证书。由于您的操作系统已经信任这些签名,因此我们可以在不进行任何确认的情况下使用它们。

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

      

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

         

    公钥:WGdoZmpodHlqa2p1aXl1eWk...

         

    请相信我们,写这封信的人,好吗?我们确定这是关键所在。写这篇文章的人是那些经营bob.com的人。我们保证。

         

    签名,

         

    写这篇文章的人

    它没有受信任的签名。用户必须决定是否希望接受公钥真正属于bob.com的证书认证。

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

    允许JavaScript自动确定信任是没有意义的。重点是用户必须决定证书是否值得信任,然后对系统的证书存储进行适当的修改。

    这个可能假设为Ajax请求做了,但它不会很漂亮。您需要向用户显示一个浏览器UI屏幕,询问用户是否希望信任脚本尝试访问的任何域的自签名证书。除了对浏览体验非常具有破坏性之外,这可能会让人感到困惑:如果我在example.com上,并且突然(由于我不知道的脚本的行为)我&# 39; m要求信任bob.com的证书,我可能完全基于我对example.com的信任而接受它。

    将证书添加到您的系统'可信证书列表,或由您的系统已信任的CA签名。

答案 1 :(得分:2)

如果所有AJAX调用都在同一个域中进行,那么添加可信证书应该足够了,如果他们不在同一个域中,使用JSONP通过AJAX获取数据你将无法获得错误。

如果您想了解JSONP,可以使用以下链接:http://www.sitepoint.com/jsonp-examples/