Jetty SSL不工作。访问网站会产生无法读取的输出
编辑:浏览器上安装的自签名证书使其正常工作 我已经在端口8080上为http配置了jetty 9 embedded,在端口8443上配置了https。当我访问localhost:8080时,我得到了我的网站,一切正常,但当我试图访问localhost:8443时,我得到了这个混乱: 为了设置http连接器和https连接器,我几乎模仿了jetty文档中的。这是我的密码: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
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,看看这是否有帮助,但没有。我是否需要在浏览器中安装公共证书?是的,似乎是这样。我很笨。