当前位置: 首页 > 面试题库 >

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

徐焱
2023-03-14
问题内容

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

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

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

{/ headdesk}


问题答案:

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

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

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



 类似资料:
  • 问题内容: 我对phonegap比较陌生,最近我在Windows apache服务器上使用自签名证书设置了HTTPS / SSL,并尝试发出HTTPS ajax发布请求。在浏览器中运行时,该请求工作正常,但在phonegap中运行时失败。我尝试将android:debuggable设置为false,但这不能解决问题。我也做了一些研究,似乎phonegap确实支持HTTPS ajax请求,所以我对请

  • 我正在使用Angular http模块调用由自签名证书启用的httpsendpoint。 代码类似于以下所示: 当angular应用程序在chrome浏览器中运行时,会导致错误“net::ERR\u CERT\u AUTHORITY\u INVALID”。此错误发生在上。http。获取(…)方法调用。 节点的https模块有一个如下所示的选项,它似乎可以工作(从此处输入链接描述: 问题:是否可以在

  • 问题内容: 我试图使用(java)密钥工具创建一个自签名证书,但是当我尝试使用它时,出现以下异常(有关完整异常,请参见底部)。 我知道我可以使用以下代码绕过此代码: (资源) 但是我对此解决方案不感兴趣,因为我认为这会造成安全漏洞。(如果我错了,请纠正我)。 谁能指出我正确的方向?我目前正在本地进行测试,因此很容易进行更改。我可以访问服务器代码,客户端代码和.keystore文件。 更新资料 我试

  • 我正试图将我的计算机配置为信任用于测试网站的自签名证书。然而,我在Firefox上遇到了一些问题。Chrome和IE都没问题。 我做了以下几点。 使用OpenSSL创建2048位pem rsa密钥和crt 从密钥和crt文件创建pfx文件 使用MMC将pfx导入到服务器上的个人证书存储中 将IIS配置为使用站点的证书 在客户端PC上 null 我还尝试将证书直接添加到Firefox的权限列表中。它

  • 问题内容: 我是android新手。这个问题已经被问过很多遍了,但是我在这里几乎遍历了所有问题。 我正在尝试在Node.Js服务器上使用自签名证书(使用express),在Android上使用Volley。 使用:http : //blog.applegrew.com/2015/04/using- pinned-self-signed-ssl-certificate-with-android- v

  • 尝试按照关于创建用于localhost的自签名证书的各种说明进行操作,大多数说明似乎是针对IIS的,但我尝试使用NodeJS/Express。它们都无法正常工作,因为在安装证书时,它不受信任。以下是我尝试失败的方法: null 编辑:在注释中建议问题是不受信任的证书根。我通过IE安装了证书,但它仍然不受信任。