Question

J'essaie de configurer un serveur HTTP minimal sur SPDY avec Jetée, à des fins de tests.Je travaille sur ce code :

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();
    }
}

J'ai généré le keystore avec :

keytool -genkey -keystore dummy_keystore.jks

Lorsque je pointe Google Chrome (SPDY activé) vers https://localhost:8443 il m'avertit du certificat non fiable puis se charge pour toujours.

Les exemples client-serveur SPDY purs (de ici) fonctionnent et un simple serveur HTTPS fonctionne également ;le problème semble lié au HTTPSPDYServerConnector classe.

Voici la liste des JAR que j'utilise :

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

Et pour ce qui concerne mon environnement Java :

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

Addendum à la solution

Jesse McConnell à condition que répondre, de toute façon, ceux qui utilisent Eclipse peuvent trouver ce qui suit utile.

Le pot npn-boot-7.6.2.v20120308.jar doit (également) être placé dans :

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

Notez que depuis l'ordre compte, cette entrée doit apparaître avant le JRE System Library.

Était-ce utile?

La solution

Utilisez-vous npn-boot comme fichier jar bootclasspath lors du démarrage ?

Stock jvm ne prendra pas en charge npn (négociation du prochain protocole) et spdy ne fonctionnera pas, vous devez donc vous assurer que le fichier jar npn-boot est utilisé conjointement avec l'option -Xbootclasspath.Cela ressemble un peu à votre problème puisque vous traitez le chargement du certificat, puis son blocage... également que vous faites référence à npn-boot comme une dépendance alors qu'il s'agit plus d'un remplacement de classes jvm que d'une dépendance typique.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top