2017-04-10 214 views
1

我尝试解释我们的问题。将请求从https发送到本地http服务器

我们正在编写一个小工具(与Java 1.8和Jetty +泽西岛),它提供了一个休息服务器用于保存数据(文档,...)直接硬盘驱动器或打印文档。

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

问题是你不能从HTTPS页面请求发送到当地的工具,如果它不是SSL加密。

我们需要的是我们工具的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" 
     }); 

在那里,我们添加虚拟主机到码头服务器。我们为我们的域名拥有自签名证书(用于测试)。

我们要存档是这样的:

enter image description here

这里是一些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(我认为其他的浏览器,太)阻塞主机头

+0

如果从HTTPS的,它最好是到https –

+0

我们希望将SSL证书添加到我们的工具,但问题是目标。目标可以有每个IP地址。很难解释这个问题。 –

回答

1

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

比方说你有dominice-so.com

如果你创建了一个东西DNS条目像self.dominice-so.com总是返回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(); 

它由你来确保密钥库/信任库口令,使其不进入邪恶的手中。 (这超出了这个问题的范围)

+1

感谢您的回答。但这就是问题所在,我们不仅需要127.0.0.1,还需要其他IP地址,如192.168.2.50,如果它是网络PC(如服务器机器)。我们需要尽可能降低客户的工作量。 一种方法是创建一个通配符证书并使用他所需的ip地址为每个客户创建一个子域。但这对我们来说是“很多”的努力。 –

+0

在这种情况下,您必须根据该环境已知的CA生成环境内证书(每个公司可能有不同的CA规则)。 –

+0

我们现在正在实施这种方式。我认为这是最好的方法。再次感谢 –