2017-02-16 27 views
0

У меня есть следующий код, который должен настроить конечную точку защищенного веб-узла в автономном приложении Java (jnlp triggered) и разрешить мне подключаться от клиента (Javascript в браузере) с URL-адресом : WS: // локальный: 8444/эхоНе удается подключиться к защищенному веб-узлу, запущенному на Jetty

сервер запускается без ошибок, но я не могу подключиться:

подключение WebSocket к 'WSS: // локальный: 8444/эхо' не удалось: Ошибка в установка соединения: сеть :: ERR_CONNECTION_CLOSED

server = new Server(); 

    SslContextFactory contextFactory = new SslContextFactory(); 
    contextFactory.setKeyStorePath("/path/keys/keystore.jks"); 
    contextFactory.setKeyStorePassword("changeit"); 
    SslConnectionFactory sslConnectionFactory = new SslConnectionFactory(contextFactory, org.eclipse.jetty.http.HttpVersion.HTTP_1_1.toString()); 

    ServerConnector connector = new ServerConnector(server, sslConnectionFactory); 
    connector.setPort(8444); 

    ServletContextHandler contextHandler = new ServletContextHandler(ServletContextHandler.SESSIONS); 
    contextHandler.setContextPath("/"); 
    HandlerCollection hc = new HandlerCollection(); 
    hc.addHandler(contextHandler); 
    server.setHandler(contextHandler); 

    server.addConnector(connector); 

    // Add websocket servlet 
    ServletHolder wsHolder = new ServletHolder("echo",new EchoSocketServlet()); 
    contextHandler.addServlet(wsHolder,"/echo"); 

    try 
    { 
     server.start(); 
     server.join(); 
    } 
    catch (Exception e) 
    { 
     e.printStackTrace(); 
    } 

Если кто-либо может заметить очевидную ошибку в вышеуказанном, то будет оценена некоторая обратная связь. Кроме того, я могу успешно подключиться к указанному выше, когда я удаляю SslConnectionFactory и подключаюсь с помощью URL-адреса без SSL-соединения (ws: //).

+0

Если вы попытаетесь подключиться к чему-то вроде 'https: // localhost: 8444/blarg', вы получите более полезное сообщение об ошибке? –

+0

'HandlerCollection hc' не используется, не стесняйтесь удалить его. –

+0

Пробовал URL-адрес, предложенный в браузере, и получил следующее: curl: (35) Сервер прервал SSL-квитирование Я бы подумал, что hc использовался в коде выше, в силу того, что к нему добавлен contextHandler, который затем добавляется как обработчик объекта сервера? – dre

ответ

1

Наконец получил он работает с большим количеством проб и ошибок, некоторые болей и немного помощи от этого парня: https://stackoverflow.com/a/37882046/2288004

Для тех, кто думает, что они могут быть помогло этим, я обновил код сервера, как показано ниже и отправился на работу по созданию самоподписанного сертификата: Кроме того, окончательное решение (при использовании самоподписанного (ненадежного) сертификата) заключается в том, чтобы перейти к защищенному URL-адресу в вашем браузере по выбору и получить подсказку, чтобы вы может добавить исключение. Если вы этого не сделаете, он НИКОГДА не будет работать!

final int port = 5040; 
    final int sslPort = 8442; 

    server = new Server(port); 

    SslContextFactory contextFactory = new SslContextFactory(); 
    contextFactory.setKeyStorePath("/Users/me/keystore"); 
    contextFactory.setKeyStorePassword("password"); 
    SslConnectionFactory sslConnectionFactory = new SslConnectionFactory(contextFactory, org.eclipse.jetty.http.HttpVersion.HTTP_1_1.toString()); 

    HttpConfiguration config = new HttpConfiguration(); 
    config.setSecureScheme("https"); 
    config.setSecurePort(sslPort); 
    config.setOutputBufferSize(32786); 
    config.setRequestHeaderSize(8192); 
    config.setResponseHeaderSize(8192); 
    HttpConfiguration sslConfiguration = new HttpConfiguration(config); 
    sslConfiguration.addCustomizer(new SecureRequestCustomizer()); 
    HttpConnectionFactory httpConnectionFactory = new HttpConnectionFactory(sslConfiguration); 

    ServerConnector connector = new ServerConnector(server, sslConnectionFactory, httpConnectionFactory); 

    connector.setPort(sslPort); 
    server.addConnector(connector); 

    ServletContextHandler context = new ServletContextHandler(ServletContextHandler.SESSIONS); 
    context.setContextPath("/"); 

    try 
    { 
     // Add websocket servlet 
     ServletHolder wsHolder = new ServletHolder("ws-echo", new EchoSocketServlet()); 
     context.addServlet(wsHolder,"/echo"); 

     server.setHandler(context); 

     server.start(); 
     server.dump(System.err); 
     server.join(); 
    } 
    catch (Throwable t) 
    { 
     t.printStackTrace(System.err); 
    } 

 Смежные вопросы

  • Нет связанных вопросов^_^