将请求从https发送到本地http服务器
我尝试解释我们的问题。将请求从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"
});
在那里,我们添加虚拟主机到码头服务器。我们为我们的域名拥有自签名证书(用于测试)。
我们要存档是这样的:
这里是一些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
如果你创建了一个东西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();
它由你来确保密钥库/信任库口令,使其不进入邪恶的手中。 (这超出了这个问题的范围)
感谢您的回答。但这就是问题所在,我们不仅需要127.0.0.1,还需要其他IP地址,如192.168.2.50,如果它是网络PC(如服务器机器)。我们需要尽可能降低客户的工作量。 一种方法是创建一个通配符证书并使用他所需的ip地址为每个客户创建一个子域。但这对我们来说是“很多”的努力。 –
在这种情况下,您必须根据该环境已知的CA生成环境内证书(每个公司可能有不同的CA规则)。 –
我们现在正在实施这种方式。我认为这是最好的方法。再次感谢 –
如果从HTTPS的,它最好是到https –
我们希望将SSL证书添加到我们的工具,但问题是目标。目标可以有每个IP地址。很难解释这个问题。 –