对嵌入式Jetty的HTTPS请求失败

时间:2014-10-29 17:50:16

标签: java ssl jetty ssl-certificate embedded-jetty

  

编辑:这实际上根本不是Jetty问题。我尝试使用带有自签名证书的HTTPS运行服务器,它可以工作   精细。因此,使证书正常运行是一个问题。我要去   投票结束这个问题。

我正在尝试使用嵌入式Jetty(v9.2.3)的SSL设置安全站点。虽然我一直在开发这个网站,但除了本地测试之外,我还在服务器上有一个现场演示,可供其他人查看,通过HTTP在端口8080上运行。

我正在尝试切换到HTTPS,但它不起作用。该站点根据日志启动正常,显然它正在侦听端口443,但所有请求都立即被拒绝。 Chrome告诉我网页不可用。但是服务器上没有任何内容可以指示错误。从服务器启动的终端或日志中都没有输出。如果我切换回使用端口8080和HTTP,那么它通常会提供请求。

以下启动代码中使用的keystore是使用证书颁发机构(server.crt)颁发的证书生成的,其中包含以下内容:

keytool -keystore keystore -import -alias keyalias -file server.crt -trustcacerts

我还应该提一下,当我在localhost上使用自签名证书运行服务器时,它可以工作。但是如果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);
    }

...并且服务器以以下输出开始:

[main] INFO org.eclipse.jetty.util.log - Logging initialized @202ms
[main] INFO org.eclipse.jetty.server.Server - jetty-9.2.3.v20140905
[main] INFO org.eclipse.jetty.webapp.StandardDescriptorProcessor - NO JSP Support for /, did not find org.apache.jasper.servlet.JspServlet
[main] INFO org.eclipse.jetty.server.handler.ContextHandler - Started o.e.j.w.WebAppContext@37132aca{/,file:/home/ubuntu/CS4L/war/,AVAILABLE}{war}
[main] INFO org.eclipse.jetty.server.ServerConnector - Started ServerConnector@261bf0a0{SSL-http/1.1}{0.0.0.0:443}
[main] INFO org.eclipse.jetty.server.Server - Started @5792ms

修改
我的服务器在AWS EC2实例上运行,并且有入站请求过滤器,但允许在端口80和443进入的所有请求。

1 个答案:

答案 0 :(得分:0)

我遇到了类似的问题,原因是证书的密码与设置为密钥库的密码不同。它们必须相同。