ERR_INSECURE_RESPONSE在Javascript中处理提示

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

无法加载资源:net :: ERR_INSECURE_RESPONSE

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

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

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

HTTPS提供两个安全优势:

  1. 你知道你和你正在谈话的人之间的沟通渠道是安全的(例如,当Alice与Bob谈话时,她知道没有其他人可以收听)
  2. 你知道你在和谁说话的人真的是他们声称的人(例如,当Alice与bob.com谈话时,她知道这真的是她所知道的bob.com服务器,而不是冒名顶替者)

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

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

当您尝试连接到bob.com ,该站点会为您提供执行安全通信的公钥。 你持怀疑态度并说:“当然,这张公钥会让我安全地跟你说话,但我怎么知道你真的是 bob.com ?” 然后,服务器会为您提供CA签名证书 ,其中包含:

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

公钥: ZGdlZGhydGhyaHJ0eWp5cmo...

可validation签名,

威瑞信

当且仅当他们已经可靠地validation公钥确实属于域名时,才有许多主要的证书颁发机构(通过操作系统和浏览器)广泛信任签发证书。 因为您的操作系统已经信任这些签名,所以我们可以使用它们而无需任何确认。

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

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

公钥: WGdoZmpodHlqa2p1aXl1eWk...

只要相信我们,写这封信的人,好吗? 我们绝对肯定这是关键。 写这篇文章的人是那些经营bob.com 。 我们承诺。

签,

写这封信的人

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

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

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

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

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

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

如果您想了解JSONP,请参阅以下链接: http : //www.sitepoint.com/jsonp-examples/