2017-04-10 139 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

我們現在正在實施這種方式。我認爲這是最好的方法。再次感謝 –

相關問題