我正在嘗試在代理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請求的代理作爲測試。行爲:
- 當我點擊「http://www.bbc.co.uk/」,我得到「Hello,World!....」在控制檯中的預期。
- 當我點擊「https://github.com/」時,我沒有得到任何控制檯輸出。
有誰知道這是爲什麼?
代理https是一箇中間人攻擊。瀏覽器試圖驗證它的連接是否與目標服務器連接,而不是代理服務器。請參閱http://stackoverflow.com/questions/516323/https-connections-over-proxy-servers – flup
由於Bruno評論鏈接的答案,HTTP代理在這個意義上不是「中間人」。例如,我們在工作中使用名爲CNTLM的代理,該代理使用我們的公司NTLM代理進行身份驗證。通過HTTPS連接,CNTLM和公司代理都可以正常工作。在公司代理案例中,您可以想象這可以通過使用一種證書推廣到所有公司機器來實現,但對於本地安裝的CNTLM,則不存在這樣的過程。代理無需解密HTTPS流量並因此擁有證書。 – Kidburla