Jetty SSL不工作。访问网站会产生无法读取的输出

Jetty SSL不工作。访问网站会产生无法读取的输出,ssl,https,jetty,embedded-jetty,Ssl,Https,Jetty,Embedded Jetty,编辑:浏览器上安装的自签名证书使其正常工作 我已经在端口8080上为http配置了jetty 9 embedded,在端口8443上配置了https。当我访问localhost:8080时,我得到了我的网站,一切正常,但当我试图访问localhost:8443时,我得到了这个混乱: 为了设置http连接器和https连接器,我几乎模仿了jetty文档中的。这是我的密码: File keystoreFile = new File("config/myownkeystore.p12"); i

编辑:浏览器上安装的自签名证书使其正常工作

我已经在端口8080上为http配置了jetty 9 embedded,在端口8443上配置了https。当我访问localhost:8080时,我得到了我的网站,一切正常,但当我试图访问localhost:8443时,我得到了这个混乱:

为了设置http连接器和https连接器,我几乎模仿了jetty文档中的。这是我的密码:

File keystoreFile = new File("config/myownkeystore.p12");
    if (!keystoreFile.exists()){
        throw new FileNotFoundException(keystoreFile.getAbsolutePath());
    }

    Server server = new Server();

    HttpConfiguration http_config = new HttpConfiguration();
    http_config.setSecureScheme("https");
    http_config.setSecurePort(8443);
    http_config.setOutputBufferSize(32768);

    ServerConnector http = new ServerConnector(server,
            new HttpConnectionFactory(http_config));
    http.setPort(8080);
    http.setIdleTimeout(30000);

    SslContextFactory sslContextFactory = new SslContextFactory();
    sslContextFactory.setKeyStoreType("PKCS12");
    sslContextFactory.setKeyStorePath(keystoreFile.getAbsolutePath());
    sslContextFactory.setKeyStorePassword("myownstorepass");
    sslContextFactory.setKeyManagerPassword("myownkeypass");


    HttpConfiguration https_config = new HttpConfiguration(http_config);
    SecureRequestCustomizer src = new SecureRequestCustomizer();
    src.setStsMaxAge(2000);
    src.setStsIncludeSubDomains(true);
    https_config.addCustomizer(src);

    ServerConnector https = new ServerConnector(server,
        new SslConnectionFactory(sslContextFactory,HttpVersion.HTTP_1_1.asString()),
            new HttpConnectionFactory(https_config));
    https.setPort(8443);
    https.setIdleTimeout(500000);

    // Set the connectors
    server.setConnectors(new Connector[] { http, https });

    // servlet handler
    ServletContextHandler servletContextHandler = new ServletContextHandler(ServletContextHandler.SESSIONS);
    servletContextHandler.setResourceBase(".");
    servletContextHandler.setContextPath("/");
    servletContextHandler.addServlet(new ServletHolder(new MainServlet()), "/*");

    // set the handlers
    HandlerCollection handlerList = new HandlerCollection();
    handlerList.setHandlers(new Handler[]{servletContextHandler});
    server.setHandler(handlerList);
起初我认为密钥库类型可能有问题,因为jetty默认使用jks。因此,我将sslcontext切换为使用pkcs12,因为密钥库是一个.p12文件。那没用

我接下来检查了密码,但是私钥和密钥库的密码都是相同的,所以这不是问题所在


在这一点上,我想相信我的代码中有错误,但我不知道到底是什么错误。

只需将代码复制/粘贴到我的IDE中即可。它可以与Java 8u91和jetty-9.3.11.v20160721配合使用。我在你粘贴的内容上做的唯一事情是:创建一个MainServlet,使用我自己的密钥库和密钥库密码(我也不使用PKCS12证书)。我只是用一个新的密钥对生成了一个新的JKS,看看这是否有帮助,但没有。我是否需要在浏览器中安装公共证书?是的,似乎是这样。我很笨。只要把你的代码复制/粘贴到我的IDE中就行了。它可以与Java 8u91和jetty-9.3.11.v20160721配合使用。我在你粘贴的内容上做的唯一事情是:创建一个MainServlet,使用我自己的密钥库和密钥库密码(我也不使用PKCS12证书)。我只是用一个新的密钥对生成了一个新的JKS,看看这是否有帮助,但没有。我是否需要在浏览器中安装公共证书?是的,似乎是这样。我很笨。