我想对使用自签名证书的安全服务器进行 AJAX 调用。在使用我的应用程序的环境中,这很好——我可以向用户提供 CA 证书并让他们在使用应用程序之前安装它。但是,有时,用户会在安装证书之前尝试访问该应用程序。在这些情况下,应用程序会默默地失败——至少在 Firefox 中(最常见的问题情况),看起来调用会默默地终止,甚至没有触发错误处理程序。 FWIW,如果用户访问实际的page在服务器上,他们收到证书警告。
我可以破解一个解决方法 - 例如,发出心跳/ping 请求并设置一个看门狗计时器来查看服务器是否及时响应 - 但这看起来很糟糕。我希望能够提前测试连接。确保您想要交谈的服务器拥有来自 Javascript 的可信证书的“正确”方法是什么?如果有什么区别的话,我将通过 JQuery 执行 AJAX 请求。
更新:这里有一个很棒的妙语。事实证明,AJAX 根本不是问题所在。根据症状,我确信它与自签名证书有关,但缺乏 AJAX 错误令人不安,尤其是。给出下面答案中链接的规范。另一位团队成员解决了这个问题:AJAX 错误处理程序没有启动,因为JQuery 从未加载过!我们包含了来自我们网站的另一个子域的 JQuery,该子域也托管在 HTTPS 上 - 用户为 ourService.example.com 添加了例外,但没有为 js.example.com 添加了例外。显然如果你指向一个<script>
在不可信的安全连接上标记,that也默默地失败。
{/服务台}
XMLHttpRequest(AJAX 请求)仅允许在同源服务器上使用。这意味着目标URL 的scheme://host:port 部分必须与当前文档的scheme://host:port 部分匹配。根据规范,您甚至不应该被允许从非 SSL URL 向 SSL URL 发出请求。
我看到的不太黑客的解决方案是,您只需将所有用户强制重定向到 SSL 站点。这样,他们将被迫在发出任何 AJAX 请求之前看到证书警告。
注意:规范还规定,如果 TLS 握手失败(我认为这种情况在某种程度上属于这种情况),它应该抛出 NETWORK_ERR (代码 19)异常。您可以尝试在发起 AJAX 请求时捕获异常。参考the spec http://www.w3.org/TR/XMLHttpRequest/#request-error有关错误处理的更多详细信息。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)