Пример использования ssl с org.apache.http.impl.bootstrap.HttpServer из Apache HttpCore 4.4.3

Я успешно создал встроенный HttpServer, используя пример на https://hc.apache.org.httpcomponents-core-ga/httpcore/examples/org/apache/http/examples/HttpFileServer.java, который отлично обрабатывает http: трафик. Теперь я хотел бы расширить это для поддержки TLS.

Я скопировал отсюда какой-то вероятный код: https://hc.apache.org/httpcomponents-core-ga/tutorial/html/blocking-io.html#d5e455

Но некоторые его части отображаются как устаревшие, что заставляет меня задаться вопросом, не устарел ли этот пример и является ли дерево, на котором я нахожусь, тем, на котором я должен лаять. Даже если бы это было не так, у меня возникли проблемы с поиском связи между HttpServer и DefaultBHttpClientConnection (упомянутым в примере). Я подозреваю, что мне следует использовать DefaultBHttpServerConnection, но я тоже пока не могу этого найти.

Есть ли где-нибудь более свежий пример этого?

Майкл Д. Спенс Mockingbird Data Systems, Inc.


person user2974846    schedule 16.09.2015    source источник


Ответы (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();
person ok2c    schedule 17.09.2015
comment
Re: sslcontext = SSLContexts.custom () SSLContexts показывался как устаревший в Netbeans. Но, похоже, вы хотели вместо этого использовать SSLContextBuilder. Кажется, это работает, но теперь я получаю ужасные общие наборы шифров во время выполнения. - person user2974846; 18.09.2015
comment
org.apache.http.ssl.SSLContexts не является устаревшим http://hc.apache.org/httpcomponents-core-4.4.x/httpcore/xref/org/apache/http/ssl/SSLContexts.html. Что касается вашего кода SSL, это совсем другая история. Естественно, что и клиентская, и серверная сторона должны иметь совместимые настройки для работы транспортной безопасности. - person ok2c; 18.09.2015