title: Setting up secure WebSocket server with Jetty and JavaScript client
body: <p>I am trying to setup a secure WebSocket server with Jetty like the following:</p>
  
  <pre><code>import java.util.ArrayList;
  import java.util.List;
  
  import org.eclipse.jetty.http.HttpVersion;
  import org.eclipse.jetty.server.Handler;
  import org.eclipse.jetty.server.HttpConfiguration;
  import org.eclipse.jetty.server.HttpConnectionFactory;
  import org.eclipse.jetty.server.Server;
  import org.eclipse.jetty.server.ServerConnector;
  import org.eclipse.jetty.server.SslConnectionFactory;
  import org.eclipse.jetty.server.handler.ContextHandler;
  import org.eclipse.jetty.server.handler.HandlerCollection;
  import org.eclipse.jetty.util.ssl.SslContextFactory;
  import org.eclipse.jetty.websocket.server.WebSocketHandler;
  import org.eclipse.jetty.websocket.servlet.WebSocketServletFactory;
  
  
  public class WebSocketServer
  {
      private Server server;
      private String host="localhost";
      private int port=8080;
      private String keyStorePath = "C:\\keystore";
      private String keyStorePassword="password";
      private String keyManagerPassword="password";
      private List&lt;Handler&gt; webSocketHandlerList = new ArrayList();
      MessageHandler messagehandler;
  
      public WebSocketServer()
      {
          System.out.println("WebSocketServer");
  
          server = new Server();
  
          // connector configuration
          SslContextFactory sslContextFactory = new SslContextFactory();
          sslContextFactory.setKeyStorePath(keyStorePath);
          sslContextFactory.setKeyStorePassword(keyStorePassword);
          sslContextFactory.setKeyManagerPassword(keyManagerPassword);
          SslConnectionFactory sslConnectionFactory = new SslConnectionFactory(sslContextFactory, HttpVersion.HTTP_1_1.asString());
          HttpConnectionFactory httpConnectionFactory = new HttpConnectionFactory(new HttpConfiguration());
          ServerConnector sslConnector = new ServerConnector(server, sslConnectionFactory, httpConnectionFactory);
          sslConnector.setHost(host);
          sslConnector.setPort(port);
          server.addConnector(sslConnector);
  
          // handler configuration
          HandlerCollection handlerCollection = new HandlerCollection();
          handlerCollection.setHandlers(webSocketHandlerList.toArray(new Handler[0]));
          server.setHandler(handlerCollection);
  
          WebSocketHandler wsHandler = new WebSocketHandler() {
              @Override
              public void configure(WebSocketServletFactory webSocketServletFactory) {
                  webSocketServletFactory.register(MyWebSocketHandler.class);
              }
          };
          ContextHandler wsContextHandler = new ContextHandler();
          wsContextHandler.setHandler(wsHandler);
          wsContextHandler.setContextPath("/");  // this context path doesn't work ftm
          webSocketHandlerList.add(wsHandler);
  
          messagehandler = new MessageHandler();
          new Thread(messagehandler).start();
  
          try {
              server.start();
          } catch (Exception e) {
              e.printStackTrace();
          }
      }
  }
  </code></pre>
  
  <p>The keystore file is created with the following command found <a href="http://www.eclipse.org/jetty/documentation/current/configuring-ssl.html" rel="nofollow noreferrer">here</a> in the jdk/bin folder:</p>
  
  <pre><code>keytool.exe -keystore keystore -alias jetty -genkey -keyalg RSA
  </code></pre>
  
  <p>After that I moved the file into the C directory for easy path usage.</p>
  
  <p>With this configuration my server seems to start without any problems. So I am trying to connect to it with my website like this:</p>
  
  <pre><code>ws = new WebSocket("wss://localhost:8080/");
  </code></pre>
  
  <p>This doesn't work at all. Like written <a href="https://stackoverflow.com/a/6969480/1754625">here</a>, I think I have to configure the SSL certificate. Furthermore, to create the server I used this <a href="http://amilamanoj.blogspot.de/2013/06/secure-websockets-with-jetty.html" rel="nofollow noreferrer">tutorial</a> and for the java client side they implement a <code>truststore</code>. Do I have to do something similar for JavaScript?</p>