2017-01-26 11 views
0

Я изо всех сил пытаюсь построить встроенный сервер Jetty, который будет принимать запросы TLSv1.2.Jetty для поддержки запросов TLS 1.2 от SoapUI

Это код Java:

private void launchHttpsListener() { 

Server server = new Server(new InetSocketAddress(m_sAddress, m_nPort)); 

SslContextFactory sslContextFactory = new SslContextFactory(); 
sslContextFactory.setKeyStorePath("./keystore.jks"); 
sslContextFactory.setKeyStorePassword("Aa123456"); 
sslContextFactory.setKeyManagerPassword("Aa123456"); 
//sslContextFactory.setProtocol("TLSv1.2"); 
//sslContextFactory.setIncludeProtocols("TLSv1.2"); 

// Setup HTTP Configuration 
HttpConfiguration httpConf = new HttpConfiguration(); 
httpConf.setSecurePort(m_nPort); 
httpConf.setSecureScheme("https"); 
httpConf.addCustomizer(new SecureRequestCustomizer()); 

ContextHandler contextHandler = new ContextHandler(); 
contextHandler.setContextPath("/Service"); 
contextHandler.setHandler(new JettyServiceHandler()); 

ContextHandlerCollection contextHandlers = new ContextHandlerCollection(); 
contextHandlers.setHandlers(new Handler[] { contextHandler }); 

ServerConnector serverConnector = new ServerConnector(server, 
    new SslConnectionFactory(sslContextFactory,"http/1.1"), 
    new HttpConnectionFactory(httpConf)); 

serverConnector.setPort(m_nPort); 

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

try { 
    server.start(); 

    Log4jWrapper.writeLog(LogLevelEnum.INFO, "[-----------------] <JettyServiceListener> launchHttpsListener", 
      "HTTPS Listener on " + m_sAddress + ":" + m_nPort); 

    server.join(); 
} catch (InterruptedException e) { 

    Log4jWrapper.writeLog(LogLevelEnum.ERROR, "[-----------------] <JettyServiceListener> launchHttpsListener", 
      e.getMessage()); 
} catch (Exception e) { 

    Log4jWrapper.writeLog(LogLevelEnum.ERROR, "[-----------------] <JettyServiceListener> launchHttpsListener", 
      e.getMessage()); 
} 

}

m_nPort = 9520

И это обработчик:

public class JettyServiceHandler extends AbstractHandler { 

    @Override 
    public void handle(String target, Request baseRequest, HttpServletRequest request, HttpServletResponse response) 
      throws IOException, ServletException { 

     Log4jWrapper.writeLog(LogLevelEnum.DEBUG, "[-----------------] <JettyServiceHandler> handle", "Received a notification..."); 

     String requestStr = convertStreamToString(baseRequest.getReader()); 

     Log4jWrapper.writeLog(LogLevelEnum.DEBUG, "[-----------------] <JettyServiceHandler> handle", "requestStr = " + requestStr); 


     response.setContentType("text/html;charset=utf-8"); 
     response.setStatus(HttpServletResponse.SC_OK); 
     baseRequest.setHandled(true); 
     response.getWriter().println("1.2.1"); 

    } 

    static String convertStreamToString(BufferedReader bufferedReader) { 
     Stream<String> lines = bufferedReader.lines(); 
     return lines.collect(Collectors.joining("\n")); 
    } 
} 

От SoapUI Я посылаю очень простой запрос на какой-либо адрес https 135.136.137.138:9520

В настоящее время я получаю следующее сообщение об ошибке:

ERROR:javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure

Обработчик, конечно, не достигнута.

Хранилище ключей самоподписано.

Я добавил следующее SoapUI-5.3.0.vmoptions:

-Dsoapui.https.protocols=TLSv1.2 

Где я пойти не так ??

Спасибо!

ответ

1

Найдено недостающее звено ...

Я добавил следующее:

sslContextFactory.setExcludeCipherSuites("SSL_RSA_WITH_DES_CBC_SHA", 
       "SSL_DHE_RSA_WITH_DES_CBC_SHA", 
       "SSL_DHE_DSS_WITH_DES_CBC_SHA", 
       "SSL_RSA_EXPORT_WITH_RC4_40_MD5", 
       "SSL_RSA_EXPORT_WITH_DES40_CBC_SHA", 
       "SSL_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA", 
       "SSL_DHE_DSS_EXPORT_WITH_DES40_CBC_SHA"); 

и за исключением исчезли!

+0

Примечание: список исключений не имеет ничего общего с уровнем поддержки TLS. На самом деле, ваши шифры '* _RSA _ * _ SHA' фактически не поддерживаются современными браузерами и не имеют смысла в этом контексте. –