Вопрос

Я пытаюсь настроить минимальный сервер HTTP через SPDY с помощью Пристань, в целях тестирования.Я работаю над этим кодом:

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.eclipse.jetty.server.Connector;
import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.spdy.http.HTTPSPDYServerConnector;
import org.eclipse.jetty.util.ssl.SslContextFactory;

import org.eclipse.jetty.server.Request;
import org.eclipse.jetty.server.handler.AbstractHandler;

public class MySPDYHelloServer {
    public static void main(String[] args) throws Exception {
        Server server = new Server();

        SslContextFactory sslFactory = new SslContextFactory();
        sslFactory.setKeyStorePath("dummy_keystore.jks");
        sslFactory.setKeyStorePassword("password");
        sslFactory.setProtocol("TLSv1");

        Connector connector = new HTTPSPDYServerConnector(sslFactory);
        connector.setPort(8443);
        server.addConnector(connector);

        server.setHandler( new AbstractHandler(){
            public void handle(String target, Request baseRequest,
                    HttpServletRequest request, HttpServletResponse response)
                    throws IOException, ServletException {
                response.setContentType("text/html;charset=utf-8");
                response.setStatus(HttpServletResponse.SC_OK);
                baseRequest.setHandled(true);
                response.getWriter().println("<h1>Hello World</h1>");
            }
        } );

        server.start();
        server.join();
    }
}

Я создал хранилище ключей с помощью:

keytool -genkey -keystore dummy_keystore.jks

Когда я указываю Google Chrome (с включенным SPDY) на https://localhost:8443 он предупреждает меня о ненадежном сертификате, а затем загружается навсегда.

Чистые клиент-серверные примеры SPDY (из здесь) работают, и простой HTTPS-сервер тоже работает;проблема, кажется, связана с HTTPSPDYServerConnector сорт.

Вот список JAR-файлов, которые я использую:

jetty-all-7.6.7.v20120910.jar
npn-boot-7.6.2.v20120308.jar
servlet-api-2.5.jar
spdy-core-7.6.7.v20120910.jar
spdy-jetty-7.6.7.v20120910.jar
spdy-jetty-http-7.6.7.v20120910.jar

А что касается моей среды Java:

$ cat /opt/jdk1.7.0_07/release 
JAVA_VERSION="1.7.0"
OS_NAME="Linux"
OS_VERSION="2.6"
OS_ARCH="i586"

Приложение к решению

Джесси Макконнелл при условии отвечать, в любом случае те, кто использует Eclipse, могут найти полезным следующее.

Банка npn-boot-7.6.2.v20120308.jar должен (также) быть помещен в:

Run Configurations... -> Classpath -> Bootstrap Entries -> Add External JARs

Обратите внимание, что поскольку порядок имеет значение, эта запись должна появиться до тот JRE System Library.

Это было полезно?

Решение

Используете ли вы npn-boot в качестве jar-файла пути к классу загрузки при запуске?

Стандартный jvm не поддерживает npn (следующее согласование протокола), и spdy не будет работать, поэтому вам необходимо убедиться, что jar npn-boot используется вместе с опцией -Xbootclasspath.Это похоже на вашу проблему, поскольку вы имеете дело с загрузкой сертификата, а затем его остановкой... также вы называете npn-boot зависимостью, когда это скорее замена классов jvm, чем типичная зависимость.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top