【问题标题】:Communicating from https website to http server on localhost, cross-domain从 https 网站与本地主机上的 http 服务器通信,跨域
【发布时间】:2013-05-17 20:51:37
【问题描述】:

所以我有一个需要与桌面应用程序通信的 GWT webapp。为此,桌面程序在给定端口(例如,http://localhost:9000)启动网络服务器。

我已经实现了 JSON-P 通信来绕过跨域过滤器,这在本地测试时工作正常(webapp 在http://localhost:8888 运行)。问题是,生产网站是通过 https 提供的,没有浏览器允许您通过 http 从 https 请求 javascript。

所以我尝试了一些方法。

我已经使用 Java 的 HttpServletResponse.addHeader("Access-Control-Allow-Origin", "*") 在服务 GWT javascript 的服务器和 javascript 尝试向其发出请求并发出 HTTP 请求的服务器上设置了“Access-Control-Origin: *”标头,但是被同源过滤器阻止(可能是因为我试图从 https 向 http 发出请求。)

我尝试使用来自新窗口(通过调用 $wnd.open 创建)的 Json-P 通信,但没有希望通过 http 加载的 URL,但它是通过 https 加载的,所以我遇到了同样的问题问题和以前一样。

有没有办法从通过 https 提供的 javascript 到 http 发出跨域请求?没有任何可行的方法在 localhost 上运行 https(自签名证书在发出 JSON-P 请求时被阻止。)

【问题讨论】:

  • 您确定自签名 HTTP 证书无助于建立跨域 HTTPS 连接吗?
  • 您也许可以从 Internet 上某处受信任的签名 HTTPS 证书代理到本地运行的服务器。
  • 自签名绝对没有帮助。至少在 Chrome 中,如果您提供的是实际页面,则会出现带有“继续”按钮的警告。但是 AJAX 请求会静默失败。
  • 既然您可以安装本地桌面应用程序,或许您也可以导入您的根证书并在本地服务器中使用?那应该可以。
  • @MichałGrzejszczak 安装 root ca 是一个非常糟糕的主意,看看 DELL 发生了什么computerworld.com/article/3008113/security/…

标签: http https cross-domain jetty jsonp


【解决方案1】:

假设您要部署的计算机可以访问 Internet,解决此问题的最佳方法是在托管 Web 应用程序的主站点(例如 localhost.example.com)上注册一个子域并设置 DNS 条目指向 127.0.0.1 。然后,您可以获得 localhost.example.com 的签名 https 证书,并将该证书与您的应用程序一起分发。

警告词:

  • 因为证书是随您的应用程序分发的,所以它不是秘密的,所以请确保不要为 *.example.com 或类似的傻事提供证书。幸运的是,攻击者需要在本地计算机上运行服务器才能利用它,在这种情况下,他们已经可以访问您的所有 cookie 和内容。
  • 如果/当您的证书过期时,事情可能会中断。这可能需要让您的客户端应用程序从您的 Web 服务器下载证书。这样做的安全隐患应该不会比在二进制文件中分发它更糟糕。
  • 如果您对安全性非常敏感,使用完全独立的域 (localhostexample.com) 可以防止未来的漏洞利用或错误。

【讨论】:

    猜你喜欢
    • 2015-05-30
    • 1970-01-01
    • 2021-09-20
    • 2016-02-11
    • 2011-02-16
    • 2013-02-17
    • 2017-02-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多