2015-08-18 59 views
2

我正在嘗試在代理HTTP和HTTPS URL的Java中創建代理。 (我使用的是Tomcat 8.0.14,我已經將Tomcat設置爲,在端口8443上接收到 HTTPS連接,儘管這對於使用Tomcat作爲HTTPS代理來說並不是必須的,但無論哪種方式,我都會得到相同的行爲。我已經使用HTTP工作,但是當我使用HTTPS時,似乎Tomcat拒絕連接,甚至不會調用我的servlet。如何讓Tomcat(等)接受HTTPS代理請求?

爲了說明這一點,我在web.xml中創建了一個映射到「/ *」的示例「Hello World」servlet。

public class HelloWorldProxy extends HttpServlet { 
    @Override 
    public void service(ServletRequest req, ServletResponse res) 
      throws ServletException, IOException { 
     System.out.println("Hello, World! " + ((new Date()).toString())); 
     super.service(req, res); 
    } 
} 

我將「localhost:8080」設置爲Firefox中HTTP和HTTPS請求的代理作爲測試。行爲:

有誰知道這是爲什麼?

+0

代理https是一箇中間人攻擊。瀏覽器試圖驗證它的連接是否與目標服務器連接,而不是代理服務器。請參閱http://stackoverflow.com/questions/516323/https-connections-over-proxy-servers – flup

+0

由於Bruno評論鏈接的答案,HTTP代理在這個意義上不是「中間人」。例如,我們在工作中使用名爲CNTLM的代理,該代理使用我們的公司NTLM代理進行身份驗證。通過HTTPS連接,CNTLM和公司代理都可以正常工作。在公司代理案例中,您可以想象這可以通過使用一種證書推廣到所有公司機器來實現,但對於本地安裝的CNTLM,則不存在這樣的過程。代理無需解密HTTPS流量並因此擁有證書。 – Kidburla

回答

0

對我來說,目前爲止還不清楚連接的哪一部分不能正常工作。據我瞭解您的設置看起來像

客戶 < --->我-tomcat的代理 < --->一些網頁

如果客戶之間的https連接而您的tomcat不起作用,您可能需要使用SSL連接器擴展您的tomcat config xml,有關更多詳細信息,請參閱Apache Tomcat 6.0 SSL Configuration HOW-TO

我有同樣的問題,我的雄貓沒有回覆客戶端https請求。我的問題是,我沒有正確配置tomcat接受https連接。

+0

我已經設置tomcat接受https連接,根據我的問題,這工作正常(當tomcat服務器被稱爲獨立的服務器而不是作爲代理)。但是,從HTTP規範的意義上講,創建HTTPS代理也不是必需的。客戶端和代理之間的連接不是端到端的HTTPS,因爲代理只是代理主機和客戶端之間的加密流量。客戶端和代理以及代理和主機之間沒有兩個單獨的HTTPS連接。這是使用單一SSL證書的全部連接。 – Kidburla

+0

您參考的指南是關於設置HTTPS加密終止於代理的獨立服務器。我的服務器已經可以做到這一點,但這不是我想要實現的目標。我已將所有代碼和設置發佈到我的問題中。如果你能得到它的工作,併發布你如何做到這一點,那麼我會接受你的答案。不過,我懷疑您目前的答案是基於您使用獨立HTTPS服務器而不是HTTPS代理的經驗。 – Kidburla

+0

嗨Westranger,答案並沒有幫助我解決我的問題,根據我上面的評論,你還沒有回覆。 – Kidburla