jquery – AJAX调用不可信(自签名)HTTPS失败默认

我想对使用自签名证书的安全服务器进行AJAX调用。在我的应用程序正在使用的环境中,这很好 – 我可以向用户提供CA证书,并在使用该应用程序之前安装它。但是,有时,用户在安装证书之前尝试访问该应用程序。在这些情况下,该应用程序会静地失败 – 至少在Firefox(最常见的问题)中,似乎该呼叫静死机,甚至不会关闭错误处理程序。 FWIW,如果用户访问服务器上的实际页面,则会获得证书警告。

我可能会遇到一个解决方法 – 例如,做出心跳/ ping请求,并设置一个看门狗定时器,看看服务器是否及时响应 – 但是这似乎很好玩。我更愿意提前测试连接。什么是“正确”的方式来确保您要谈话的服务器具有来自Javascript内的可信证书?如果有任何区别,我通过JQuery来做我的AJAX请求。

更新:这里有一个很棒的打法。原来,AJAX根本不是问题。我确信基于与自签名证书有关的症状,但缺乏AJAX错误令人不安,尤其是。在下面的答案中给出了规范链接。另一个团队成员钉住它:AJAX错误处理程序没有被关闭,因为JQuery从未加载!我们从我们网站的另一个站点(也托管在HTTPS)中包含JQuery,用户已经为我们的www .example.com添加了例外,但不是js.example.com。显然,如果你指向< script>标记在不可信的安全连接,也会认失败。

{/ headdesk}

解决方法

XMLHttpRequests(AJAX请求)仅允许在同一来源服务器上。这意味着方案:// host:port目标URL的一部分必须与当前文档的一致。根据规范,您不应该被允许从非SSL的SSL URL发出请求。

我看到的较少的黑客解决方案是您强制将所有用户重定向到SSL站点。这样就可以在任何AJAX请求之前被迫看到证书警告。

注意:该规范还说,在TLS握手失败的情况下(我认为这种情况属于某种方式),应该抛出一个NETWORK_ERR(代码19)异常。您可以尝试在启动AJAX请求时捕获异常。有关更多详细信息,请参阅the spec错误处理。

相关文章

页面搜索关键词突出 // 页面搜索关键词突出 $(function () {...
jQuery实时显示日期、时间 html: &lt;span id=&quot...
jQuery 添加水印 &lt;script src=&quot;../../../.....
中文:Sys.WebForms.PageRequestManagerParserErrorExceptio...
1. 用Response.Write方法 代码如下: Response.Write(&q...
Jquery实现按钮点击遮罩加载,处理完后恢复 思路: 1.点击按...