小编典典

对不受信任(自签名)HTTPS的AJAX调用静默失败

ajax

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

我可以采取一种变通办法,例如发出心跳/ ping请求并设置看门狗计时器,以查看服务器是否及时响应-
但这似乎很hacky。我希望能够提前测试连接。确保要与之交谈的服务器具有Java脚本中受信任证书的“正确”方法是什么?如果有什么不同,我正在通过JQuery进行AJAX请求。

更新:这里有一个很棒的妙语。事实证明,AJAX根本不是问题。基于症状,我确定它与自签名证书有关,但是缺少AJAX错误令人不安,尤其是。给出以下答案中链接到的规格。另一个团队成员对此表示满意:AJAX错误处理程序没有触发,因为
从未加载过JQuery
!我们包括了来自站点另一个子域的JQuery,该子域也托管在HTTPS上,并且用户为ourService.example.com添加了例外,但没有为js.example.com添加例外。显然,如果您将<script>标签指向不受信任的安全连接,则
该操作 也会静默失败。

{/ headdesk}


阅读 899

收藏
2020-07-26

共1个答案

小编典典

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

我所看到的较弱的解决方案是,您只是强制将所有用户重定向到SSL站点。这样,他们将被迫在发出任何AJAX请求之前先查看证书警告。

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

2020-07-26