Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/453.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
错误\u不安全\u响应在Javascript中处理提示_Javascript_Jquery_Ajax_Ssl - Fatal编程技术网

错误\u不安全\u响应在Javascript中处理提示

错误\u不安全\u响应在Javascript中处理提示,javascript,jquery,ajax,ssl,Javascript,Jquery,Ajax,Ssl,我们有很多来自web应用程序的ajax调用,问题是所有调用都是https请求(我们的IT团队要求),是的,我们已经打开了允许跨域的标题。但问题是,我们有自己的自定义证书,用于所有应用程序的内部,因此,当我们调用ajax时,基本上会出现错误: 未能加载资源:net::错误\u不安全\u响应 如果我在浏览器中打开URL并接受证书,ajax调用可以正常工作。所以我的问题是,有没有办法通过Javascript处理这个问题?或者添加受信任的证书可以解决此问题吗?而且,即使我们添加了可信证书,我还会在aja

我们有很多来自web应用程序的ajax调用,问题是所有调用都是https请求(我们的IT团队要求),是的,我们已经打开了允许跨域的标题。但问题是,我们有自己的自定义证书,用于所有应用程序的内部,因此,当我们调用ajax时,基本上会出现错误:

未能加载资源:net::错误\u不安全\u响应

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


注意:我们正在chrome浏览器中测试所有这些,如果所有AJAX调用都在同一个域中进行,那么添加可信证书就足够了,如果它们不在同一个域中,那么使用JSONP通过AJAX获取数据,就不会出现错误


如果您想了解JSONP,这里有一个有用的链接:

是的,将证书添加到用户的可信证书列表中可以解决您的问题。只要您的服务器正确设置为服务器CORS(根据您接受证书后的成功情况,似乎是这样),证书就是您唯一的问题

HTTPS提供了两个安全优势:

  • 你知道你和你谈话的人之间的通信渠道是安全的(例如,当Alice和Bob谈话时,她知道没有其他人可以监听)
  • 你知道与你交谈的人实际上是他们声称的人(例如,当Alice与
    bob.com
    交谈时,她知道这实际上是她所知道的服务器,她称之为
    bob.com
    ,而不是冒名顶替者)
  • 第一个好处是自动的。它是由加密协议保证的,并且不能被剥离(除非对安全漏洞进行非常复杂的攻击,这些攻击通常会很快修复)

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

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

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

    公钥:
    ZGdlZGhydGhyaHJ0eWp5cmo…

    可验证签名

    VeriSign

    许多主要的证书颁发机构(操作系统和浏览器)都广泛信任它们,只要它们可靠地验证了公钥确实属于某个域名,就可以颁发签名证书。因为您的操作系统已经信任这些签名,我们可以不经任何确认就使用它们

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

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

    公钥:
    WGdoZmpodHlqa2p1aXl1eWk…

    相信我们,写这封信的人,好吗?我们肯定这是关键。写这封信的人是运行
    bob.com
    的人。我们保证

    签字

    写这封信的人

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

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

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

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


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

    是否有方法检测原因是不安全响应,以便我可以指示用户在适当的站点信任证书?获取现成的受信任证书对我来说并不总是一个选项,因此我需要在我自己的JS中检测它。@ehdv XHR API不太可能提供一种方法来区分证书错误和其他类型的网络错误。我认为您最好的选择是简单地假设错误是由证书错误引起的,然后继续。(如果站点有不安全的资源,您也可以尝试获取该资源,验证站点是否已启动,并增加问题是HTTPS的信心。)