我一直在Ubuntu 14.04上使用嵌入式Jetty(让我们称之为serverA)在默认端口443上通过HTTPS提供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
答案 0 :(得分:1)
试试这个,因为你没有告诉jetty什么是安全的,它只是使用默认值。
HttpConfiguration https = new HttpConfiguration();
https.setSecurePort(port); /* missing this */
https.addCustomizer(new SecureRequestCustomizer());
这可能看起来很奇怪,但实际上是需要的,因为即使连接以非安全的方式到达,您也可以被认为是安全的。比如来自码头前面的代理或者ssl终端负载均衡器(各种方式相当惊人)