2016-08-10 3 views
0

Ich benutze Embedded Jetty 9, wo ich https zugreifen möchte, aber keine http.Verwendung von Embedded Jetty 9 nur mit HTTPS

Ich weiß, ich kann eine Umleitung in Jetty web.xml einfach konfigurieren, aber ich habe diese Datei nicht in der eingebetteten Version. Ich weiß, dass ich jede Datei verwenden und darauf von der eingebetteten Version zeigen kann, aber das sollte einfacher sein.

Also ich suchte und fand dies hier http://blog.anvard.org/articles/2013/10/05/jetty-ssl-server.html, wo der Autor sagt "Natürlich könnten wir die Verwendung von HTTP/S erzwingen, indem Sie einfach den HTTP-Connector entfernen."

Also tat ich genau das:

Server server = new Server(); 

    SslContextFactory sslContextFactory = new SslContextFactory(); 
    sslContextFactory.setKeyStorePath(keystoreFile.getAbsolutePath()); 
    sslContextFactory.setKeyStorePassword(Keys.DOMAIN_CERTIFICATE_JKS_KEYSTORE_PASSWORD); 
    sslContextFactory.setKeyManagerPassword(Keys.DOMAIN_CERTIFICATE_KEY_MANAGER_PASSWORD); 

    HttpConfiguration httpsConfiguration = new HttpConfiguration(); 
    SecureRequestCustomizer secureRequestCustomizer = new SecureRequestCustomizer(); 
    httpsConfiguration.addCustomizer(secureRequestCustomizer); 

    ServerConnector serverConnector = new ServerConnector(server, 
      new SslConnectionFactory(sslContextFactory, HttpVersion.HTTP_1_1.asString()), 
      new HttpConnectionFactory(httpsConfiguration)); 
    serverConnector.setHost("192.168.0.5"); 
    serverConnector.setPort(9443); 
    serverConnector.setIdleTimeout(15000); 

    server.setConnectors(new Connector[] { serverConnector }); 

Problem: Es scheint nicht zu funktionieren. https funktioniert gut, aber wenn ich http zugreifen, bekomme ich 200 OK Antwort mit Junk im Körper (anstelle der erwarteten JSON-Antwort). So scheint der Server die Anfrage zu verarbeiten, aber falsch zu verschlüsseln, was auch immer. Oder habe ich etwas übersehen und meine Konfiguration ist schlecht?

-

http wireshark response

+0

Wenn Sie sagen "ich auf http zugreifen" bedeutet das, dass Sie Klartext http über 9443 verwenden? –

+0

Ja. Ich habe "http: // ..." in den Browser eingegeben und etwas verschlüsselt zurück empfangen. Ist es normal, wenn keine Weiterleitung zum Nicht-HTTP-Port erfolgt? –

+0

War es "http: // xxxxx: 9443"? Da erwartet wird, dass der Verschlüsselungs-Handshake vollständig empfangen wird oder dass der Klartext nicht unterstützt wird. –

Antwort

1

Soweit ich das beurteilen kann, haben Sie alles richtig. Die Verbindung mit dem SSL-Port und das Senden von regulärem HTTP (ohne den SSL-Handshake) sendet eine SSL-Warnmeldung zurück. Ihr HTTP-Client (aus irgendeinem Grund) gibt Ihnen die 200 OK Nachricht obwohl nicht einmal eine HTTP-Antwort erhalten.

Was Sie erhalten, ist eine SSL-Warnmeldung.

15 03 03 00 02 02 50 // response 

15 = ALERT 
03 03 = SSL version (TLS 1.x) 
00 02 = Message Length 
02 50 = Message