如何处理' connect'使用Jetty ProxyServlet请求SSL

时间:2018-05-01 17:49:00

标签: ssl servlets https jetty embedded-jetty

我正在尝试使用嵌入式码头编写代理服务器(9.4.9.v20180320)。理想情况下,我们希望使用AsyncMiddlemanServlet,以便我们可以拦截内容并在返回到客户端之前对其进行扩充/替换。通常情况下,它适用于HTTP,但我似乎无法通过HTTPS取得任何实际进展。

这是一个内部使用的代理服务器,用于向访问内部HTTPS托管内容的旧服务器产品添加一些功能。我需要让对话的服务器端元素执行必要的HTTPS对话以获取内容(我可以使用apache HttpClient在一个简单的普通' servlet中完成)我需要拥有代理side也管理CONNECT请求,因为这是旧服务器产品请求HTTPS内容时收到的。在这种情况下,当然有两种不同的SSL连接 - 旧服务器产品到我们的代理服务器,我们的代理服务器到内容。

从很多阅读中可以看出,问题在于servlet没有实现响应CONNECT请求的能力。我尝试了很多不同的例子,包括覆盖newHttpClient,如下所示:

@Override
protected HttpClient newHttpClient() {        
    return new HttpClient(new SslContextFactory());
}

并按照" Jetty ProxyServlet with SSL support"实施createHttpClient但无济于事。

我发现最接近的事情就是添加一个这样的connectHandler(使用简单的proxyServlet):

    public static void main( String[] args )
    {
        Server server = new Server();
        ServerConnector connector = new ServerConnector(server);
        connector.setPort(10106);
        server.addConnector(connector);

        // Setup  handler to handle CONNECT methods
        ConnectHandler proxy = new ConnectHandler();
        server.setHandler(proxy);

        // Setup proxy servlet
        ServletContextHandler context = new ServletContextHandler(proxy,      
         "/",ServletContextHandler.SESSIONS);

        myProxyServlet mps = new myProxyServlet();
        context.addServlet(new ServletHolder(mps), "/*");

        try{
            server.start();
        }   catch(Exception e){
            System.out.println("oh dear ;-) " + e.getMessage());
        }
    }

这种方法的工作原理是使用curl来调用https内容的代理请求会返回内容,但它不会在我的proxyServlet附近(或者当我使用它时,我的普通普通servlet)。

我们正在测试curl:

curl --insecure -x localhost:10106  https://stackoverflow.com/questions/9852056/jetty-proxyservlet-with-ssl-support?utm_medium=organic&utm_source=google_rich_qa&utm_campaign=google_rich_qa

有什么方法可以将ConnectHandler与我的servlet一起使用?一个简单的简单servlet,或者最重要的AsyncMiddlemanServlet?或者有更好的方法来实现我想要做的事情吗?

0 个答案:

没有答案