【发布时间】:2014-11-27 13:55:34
【问题描述】:
我一直在 Ubuntu 14.04(使用自签名证书)上通过 HTTPS 在默认端口 443 上使用嵌入式 Jetty(我们称之为 serverA)提供 Web 应用程序。多年来它一直运行良好,但我想在同一台机器上运行另一个嵌入式 Jetty Web 服务器(serverB)。我希望 serverB 使用默认端口 443 运行 SSL,因此我需要更改 serverA 以侦听其他端口上的请求。
我一直在尝试使用 444 和 8080 的 serverA。服务器启动得很好,告诉我它正在侦听正确端口上的请求。但请求只是挂起,服务器日志什么也没告诉我。如果我启动服务器侦听端口 443,那么一切正常。
只要我将 Web 服务器配置为使用 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 问题。
编辑:
抱歉,忘了提 Jetty 版本。它是 9.2.0
【问题讨论】:
-
只要您使用的是已发布且稳定的码头(不是 M0、M1、RC0 等),就可以了。最新的成熟/稳定版本是
9.2.3.v20140905 -
碰巧,我正在使用 jetty-all-9.2.0.M0.jar - 我不应该吗?
-
这是“里程碑 0”的预发布版本,被认为是不稳定的,仅供测试人员使用。
标签: java ssl https jetty embedded-jetty