【发布时间】:2017-04-10 10:48:52
【问题描述】:
我试图解释我们的问题。
我们正在编写一个小工具(使用 Java 1.8 和 Jetty+Jersey),它提供了一个用于在硬盘驱动器上保存数据(文档等)或直接打印文档的 rest-server。
可以在本地计算机 (localhost) 或本地网络中的不同设备上启动/访问该工具。
问题是如果 https 页面没有经过 ssl 加密,您无法将请求从 https 页面发送到本地工具。
我们需要的是我们工具的 ssl 证书。
但问题是我们无法知道我们的客户想要在哪个设备/IP 地址上运行该工具,您必须将域绑定到 ssl 证书。
我们可以创建 ssl-certificate 并将其与(例如)tool.domain.com 绑定,但该工具可以在 127.0.0.1 以及 192.168.10.2 或类似的东西上运行。
所以我的问题是,有没有办法(以编程方式)“绕过”这堵墙?
一种“方法”是向本地主机文件添加一个条目,但我们希望为客户提供尽可能少的工作,并且您不能在非 root 移动设备上设置主机条目。
编辑:添加了一些代码 sn-ps。
ServletContextHandler context = new ServletContextHandler(server, "/*");
// vhosts
// context.setContextPath("/*");
context.setVirtualHosts(new String[]{
"127.0.0.1",
"192.168.6.195",
"localhost",
"tool.domain.com"
});
我们将虚拟主机添加到码头服务器。我们的域有一个自签名证书(用于测试)。
我们想要归档这样的内容:
这里有一些用于测试/可视化的 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(我认为其他浏览器也是)阻止了 Host-Header
【问题讨论】:
-
如果是来自https,最好是https
-
我们想在我们的工具中添加一个 ssl 证书,但问题是目标。目标可以有每个 ip 地址。这个问题很难解释。
标签: javascript rest ssl jetty