SPDY “Hola servidor” con Jetty
Pregunta
Estoy intentando configurar un servidor HTTP sobre SPDY mínimo con Embarcadero, con fines de prueba.Estoy trabajando en este código:
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();
}
}
He generado el almacén de claves con:
keytool -genkey -keystore dummy_keystore.jks
Cuando apunto Google Chrome (SPDY habilitado) a https://localhost:8443
me advierte sobre el certificado que no es de confianza y luego se carga para siempre.
Los ejemplos puros de cliente-servidor de SPDY (de aquí) funcionan y un servidor HTTPS simple también funciona;El problema parece estar relacionado con el Conector de servidor HTTPSPDY clase.
Aquí está la lista de los JAR que estoy usando:
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
Y en lo que respecta a mi entorno Java:
$ cat /opt/jdk1.7.0_07/release
JAVA_VERSION="1.7.0"
OS_NAME="Linux"
OS_VERSION="2.6"
OS_ARCH="i586"
Anexo de solución
jesse mcconnel proporcionó el respuesta, de todos modos aquellos que usan Eclipse pueden encontrar útil lo siguiente.
El tarro npn-boot-7.6.2.v20120308.jar
debe (también) colocarse en:
Run Configurations... -> Classpath -> Bootstrap Entries -> Add External JARs
Tenga en cuenta que desde el orden importa, esa entrada debe aparecer antes el JRE System Library
.
Solución
¿Estás utilizando npn-boot como un jar bootclasspath al iniciar esto?
Stock jvm no admitirá npn (negociación del siguiente protocolo) y spdy no funcionará, por lo que debe asegurarse de que el jar npn-boot se esté utilizando junto con la opción -Xbootclasspath.Suena un poco como su problema ya que está lidiando con la carga de certificados y luego se estanca... también que se refiere a npn-boot como una dependencia cuando es más un reemplazo de clases jvm que una dependencia típica.