Я использую встроенный 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», это означает, что вы используете открытый текст http за 9443? –
Да. Я ввел «http: // ...» в браузер и получил что-то зашифрованное. Это нормально, когда нет перенаправления на порт, отличный от http? –
Было ли это 'http: // xxxxx: 9443'? Потому что это будет полностью ожидаемым, чтобы получить подтверждение шифрования или уведомление о том, что открытый текст не поддерживается. –