Как да използвам вграден Jetty с HTTPS през порт, различен от 443?

Обслужвам уеб приложение през HTTPS на порта по подразбиране 443 с вграден Jetty (да наречем този serverA) на Ubuntu 14.04 (използвайки самоподписан сертификат). Работи добре от векове, но искам да стартирам друг вграден Jetty уеб сървър (serverB) на същата машина. Бих искал serverB да изпълнява SSL, използвайки порта по подразбиране 443, така че трябва да сменя serverA, за да слуша за заявки на някой друг порт.

Опитвах serverA с 444 и 8080. Сървърът се задейства добре, казвайки ми, че слуша заявки на правилния порт. но заявките просто висят и регистрационните файлове на сървъра не ми казват нищо. Ако стартирам сървъра да слуша на порт 443, тогава всичко работи добре.

Не мислех, че има значение кой порт използвам, стига уеб сървърът да е конфигуриран да използва SSL. Има ли още нещо, което трябва да направя?

Ето моят код за стартиране:

    // Java 7 bug (feature?) - this disables SNI everywhere...
    // required or else outgoing HTTPS requests will fail
    System.setProperty("jsse.enableSNIExtension", "false");

    PropertyConfigurator.configure("./log4j.properties");
    Server server = new Server();

    WebAppContext webapp = new WebAppContext();
    webapp.setContextPath("/");
    webapp.setWar("war");
    server.setHandler(webapp);

    HttpConfiguration https = new HttpConfiguration();
    https.addCustomizer(new SecureRequestCustomizer());

    SslContextFactory sslContextFactory = new SslContextFactory();
    sslContextFactory.setKeyStorePath("keystore.jks");
    sslContextFactory.setKeyStorePassword("password");
    sslContextFactory.setKeyManagerPassword("password");

    ServerConnector sslConnector = new ServerConnector(server,
            new SslConnectionFactory(sslContextFactory, "http/1.1"),
            new HttpConnectionFactory(https));
    sslConnector.setPort(port);

    server.setConnectors(new Connector[] { sslConnector });

    try {
        LOG.info("Starting server on port " + port);
        server.start();
        server.join();

    } catch (Exception e) {
        LOG.fatal("The web server has crashed", e);
    }

Забележка: Причината това да е на StackOverflow, а не на SuperUser или нещо друго е, защото, доколкото разбирам, портът, използван за HTTPS, не е важен. Тогава предполагам, че това е проблем с Джети.

Редактиране:
Съжалявам, забравих да спомена версията на Jetty. Това е 9.2.0


person RTF    schedule 02.10.2014    source източник
comment
Докато използвате освободен и стабилен кей (не M0, M1, RC0 и т.н.), значи сте ОК. Последната зряла/стабилна версия е 9.2.3.v20140905   -  person Joakim Erdfelt    schedule 02.10.2014
comment
Случайно използвам jetty-all-9.2.0.M0.jar - не трябва ли?   -  person RTF    schedule 02.10.2014
comment
Това е Milestone 0 предварителна версия, считана за нестабилна, само за тестери.   -  person Joakim Erdfelt    schedule 02.10.2014


Отговори (1)


Опитайте това, тъй като не сте казали на jetty какво се счита за сигурно, то просто използва настройки по подразбиране.

HttpConfiguration https = new HttpConfiguration();
https.setSecurePort(port); /* missing this */
https.addCustomizer(new SecureRequestCustomizer());

Това може да изглежда странно, но всъщност е необходимо, защото можете да се считате за защитени, дори ако връзката е пристигнала по незащитен начин. Като например от прокси или прекратен ssl балансьор на натоварването пред кея (разнообразието от начини е доста зашеметяващо)

person Joakim Erdfelt    schedule 02.10.2014
comment
все още ли е необходим sslConnector.setPort(port)? - person RTF; 02.10.2014
comment
Все още виси на порт 444 с израза, включен във вашето решение. Опитах се да премахна sslConnector.setPort(port), но и това не работи. - person RTF; 02.10.2014
comment
Кодът ви работи добре тук (избрах порт 12444, просто защото не работех като root). Опитайте с порт над 1024, ако работи, тогава или имате проблеми с привилегирован порт, или проблеми със защитната стена. - person Joakim Erdfelt; 02.10.2014
comment
Гах, знам какво е. Работя на екземпляр на AWS EC2 с ограничения за входящ IP/порт - благодаря! - person RTF; 02.10.2014