使用Apache HttpCore 4.4.3中的org.apache.http.impl.bootstrap.HttpServer的ssl示例

时间:2015-09-16 20:30:06

标签: java ssl apache-httpcomponents

我已经使用https://hc.apache.org.httpcomponents-core-ga/httpcore/examples/org/apache/http/examples/HttpFileServer.java上的示例成功创建了一个嵌入式HttpServer,它可以很好地处理http:traffic。现在我想扩展它以支持TLS。

我从这里复制了一些可能看起来的代码:https://hc.apache.org/httpcomponents-core-ga/tutorial/html/blocking-io.html#d5e455

但是它的某些部分显示为已弃用,这让我想知道这个例子是否过时以及我所在的树是否应该是我应该吠叫的树。即使不是这种情况,我也很难找到HttpServer和DefaultBHttpClientConnection之间的关系(在示例中提到)。我怀疑我应该使用DefaultBHttpServerConnection,但我到目前为止还无法找到它。

这个地方有更新的例子吗?

迈克尔·斯宾塞 Mockingbird Data Systems,Inc。

1 个答案:

答案 0 :(得分:1)

我不确定你理解你遇到的问题。您所需要的只是向SSLContext提供正确初始化的ServerBoostrap实例。 HttpCore附带SSLContextBuilder专门用于简化SSLContext初始化过程。

HttpCore发行版中包含的示例几乎显示了设置SSL / TLS传输层所需的每个步骤。

SSLContext sslcontext = null;
if (port == 8443) {
    // Initialize SSL context
    URL url = HttpFileServer.class.getResource("/my.keystore");
    if (url == null) {
        System.out.println("Keystore not found");
        System.exit(1);
    }
    sslcontext = SSLContexts.custom()
            .loadKeyMaterial(url, "secret".toCharArray(), "secret".toCharArray())
            .build();
}

SocketConfig socketConfig = SocketConfig.custom()
        .setSoTimeout(15000)
        .setTcpNoDelay(true)
        .build();

final HttpServer server = ServerBootstrap.bootstrap()
        .setListenerPort(port)
        .setServerInfo("Test/1.1")
        .setSocketConfig(socketConfig)
        .setSslContext(sslcontext)
        .setExceptionLogger(new StdErrorExceptionLogger())
        .registerHandler("*", new HttpFileHandler(docRoot))
        .create();

server.start();