Javascript 从https向本地http(s)服务器发送请求

Javascript 从https向本地http(s)服务器发送请求,javascript,rest,ssl,jetty,Javascript,Rest,Ssl,Jetty,我试图解释我们的问题 我们正在编写一个小工具(使用Java1.8和Jetty+Jersey),它提供了一个rest服务器,用于将数据(文档,…)保存在硬盘上或直接打印文档 可以在本地计算机(localhost)或本地网络中的其他设备上启动/访问该工具 问题是,如果不是ssl加密的,则无法从https页面向本地工具发送请求 我们需要的是工具的ssl证书 但问题是,我们无法知道客户希望在哪个设备/ip地址上运行该工具,您必须将域绑定到ssl证书 我们可以创建ssl证书并将其与(例如)tool.dom

我试图解释我们的问题

我们正在编写一个小工具(使用Java1.8和Jetty+Jersey),它提供了一个rest服务器,用于将数据(文档,…)保存在硬盘上或直接打印文档

可以在本地计算机(localhost)或本地网络中的其他设备上启动/访问该工具

问题是,如果不是ssl加密的,则无法从https页面向本地工具发送请求

我们需要的是工具的ssl证书

但问题是,我们无法知道客户希望在哪个设备/ip地址上运行该工具,您必须将域绑定到ssl证书

我们可以创建ssl证书并将其与(例如)tool.domain.com绑定,但该工具可以在127.0.0.1以及192.168.10.2或类似的平台上运行

所以我的问题是,有没有办法(通过编程)“绕过”这堵墙

一种“方法”是在本地主机文件中添加一个条目,但我们希望客户尽可能少地工作,并且您不能在非根移动设备上设置主机条目

编辑:添加了一些代码片段

        ServletContextHandler context = new ServletContextHandler(server, "/*");

        // vhosts
//      context.setContextPath("/*");
        context.setVirtualHosts(new String[]{
             "127.0.0.1",
             "192.168.6.195",
             "localhost",
             "tool.domain.com"
        });
在那里,我们将虚拟主机添加到jetty服务器。我们有一个自签名证书(用于测试)用于我们的域

我们希望归档如下内容:

下面是一些用于测试/可视化的JS代码:

var xhr = new XMLHttpRequest();
xhr.open('GET', 'https://127.0.0.1:7331/test/echo/test1111');
xhr.setRequestHeader('Host', 'https://tool.domain.com');
xhr.send();

但是Chrome(我认为其他浏览器也一样)会阻止主机头

如果你有自己的公司和公司域名,那么这是可能的

假设你有
dominice so.com

如果您为
self.dominice so.com
之类的东西创建了一个dns条目,使其始终返回
127.0.0.1
,那么您可以在产品中为域名
self.dominice so.com
提供一个密钥库/托管库以及有效的证书

浏览器应该能够很好地连接,使用类似

var xhr = new XMLHttpRequest();
xhr.open('GET', 'https://self.dominice-so.com:7331/test/echo/test1111');
xhr.setRequestHeader('Host', 'https://tool.domain.com');
xhr.send();

由您来确保密钥库/信任库密码的安全,这样它就不会落入邪恶之手。(这超出了这个问题的范围)

如果它来自https,最好是https。我们希望向我们的工具添加ssl证书,但问题是目标。目标可以拥有每个ip地址。这个问题很难解释。谢谢你的回答。但这就是问题所在,我们不仅需要127.0.0.1,还需要其他ip地址,如192.168.2.50,如果它是网络pc(如服务器机器)。我们需要尽可能少的努力为我们的客户。一种方法是创建一个通配符证书,并使用每个客户所需的ip地址为其创建子域。但这对我们来说是“很大的”努力。在这种情况下,您必须基于该环境已知的CA生成环境内证书(每个公司可能有不同的CA规则)。我们现在正以这种方式实现。我认为这是最好的办法。再次感谢