2016-08-10 4 views
0

Я использую встроенный Jetty 9, где я хочу разрешить доступ к https, но не http.Использование встроенного Jetty 9 только с HTTPS

Я знаю, что я могу легко настроить перенаправление в Jetty web.xml, но у меня нет этого файла во встроенной версии. Я знаю, что могу использовать любой файл и указывать на него из встроенной версии, но это должно быть проще.

Итак, я искал и нашел это здесь http://blog.anvard.org/articles/2013/10/05/jetty-ssl-server.html, где автор заявляет: «Конечно, мы могли бы заставить использовать HTTP/S, просто удалив HTTP-коннектор».

Так что я сделал именно это:

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 }); 

Проблема: Это не похоже на работу. https работает нормально, но когда я обращаюсь к http, я получаю ответ 200 OK с мусором в теле (вместо ожидаемого ответа json). Таким образом, сервер обрабатывает запрос, но шифрует что-то неправильно. Или я пропустил что-нибудь, и моя конфигурация плоха?

-

http wireshark response

+0

Когда вы говорите «Я получаю доступ к http», это означает, что вы используете открытый текст http за 9443? –

+0

Да. Я ввел «http: // ...» в браузер и получил что-то зашифрованное. Это нормально, когда нет перенаправления на порт, отличный от http? –

+0

Было ли это 'http: // xxxxx: 9443'? Потому что это будет полностью ожидаемым, чтобы получить подтверждение шифрования или уведомление о том, что открытый текст не поддерживается. –

ответ

1

Насколько я могу судить, вы все сделали правильно. Подключение к порту SSL и отправка обычного HTTP (без установления связи SSL) возвращает сообщение SSL Alert. Ваш HTTP-клиент (по какой-то причине) дает вам сообщение 200 OK, несмотря на то, что даже не получает ответа HTTP.

То, что вы получаете, является сообщением о предупреждении SSL.

15 03 03 00 02 02 50 // response 

15 = ALERT 
03 03 = SSL version (TLS 1.x) 
00 02 = Message Length 
02 50 = Message 
Смежные вопросы