Я изо всех сил пытаюсь построить встроенный сервер 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
Где я пойти не так ??
Спасибо!
Примечание: список исключений не имеет ничего общего с уровнем поддержки TLS. На самом деле, ваши шифры '* _RSA _ * _ SHA' фактически не поддерживаются современными браузерами и не имеют смысла в этом контексте. –