带有 https 的嵌入式 Jetty:无效的密钥库格式
Embedded Jetty with https : Invalid keystore format
我正在尝试让我的嵌入式 Jetty 8.1.4(不,我可以更高!)服务器与 https 一起工作。我使用以下命令生成我的密钥库:
keytool -genkey -alias sitename -keyalg RSA -keystore keystore -keysize 2048
我的问题是,当我 运行 这个时,我得到了一个很好的异常!
WARN - AbstractLifeCycle - FAILED SslContextFactory@160b6dff(null,null): java.io.IOException: Invalid keystore format
java.io.IOException: Invalid keystore format
at sun.security.provider.JavaKeyStore.engineLoad(JavaKeyStore.java:633)
at sun.security.provider.JavaKeyStore$JKS.engineLoad(JavaKeyStore.java:38)
at java.security.KeyStore.load(KeyStore.java:1183)
我尝试按照不同的在线指南生成密钥库,但无济于事。
有什么想法吗?
非常感谢,
AW
这是服务器代码:
public static void main(String[] args) throws Exception {
Server server = new Server();
server.setStopAtShutdown(true);
server.setGracefulShutdown(ALLOWED_SHUTDOWN_TIME);
Resource keystore = Resource.newClassPathResource("/keystore");
SslContextFactory sslContextFactory = new SslContextFactory();
sslContextFactory.setKeyStoreResource(keystore);
sslContextFactory.setKeyStorePassword("wicket");
sslContextFactory.setTrustStoreResource(keystore);
sslContextFactory.setKeyManagerPassword("wicket");
SslSelectChannelConnector connector = new SslSelectChannelConnector(sslContextFactory);
connector.setMaxIdleTime(30000);
connector.setPort(getServerPort());
connector.setAcceptors(4);
connector.setReuseAddress(false);
server.addConnector(connector);
final ServletContextHandler context = new ServletContextHandler(server, "/", ServletContextHandler.SESSIONS);
context.setResourceBase("src/main/webapp");
context.setInitParameter("org.eclipse.jetty.servlet.Default.dirAllowed", "false");
context.getSessionHandler().getSessionManager().setMaxInactiveInterval(60 * 15);
context.getSessionHandler().getSessionManager().setSessionTrackingModes(newHashSet(SessionTrackingMode.COOKIE));
final FilterHolder openSessionInViewFilter = new FilterHolder(new OpenSessionInViewFilter());
context.addFilter(openSessionInViewFilter, "/", EnumSet.of(DispatcherType.REQUEST));
final FilterHolder wicketFilter = new FilterHolder(WicketFilter.class);
wicketFilter.setInitParameter(WicketFilter.FILTER_MAPPING_PARAM, "/*");
wicketFilter.setInitParameter("applicationFactoryClassName", "org.apache.wicket.spring.SpringWebApplicationFactory");
wicketFilter.setInitParameter("configuration", "development");
context.addFilter(wicketFilter, "/*", EnumSet.of(DispatcherType.REQUEST));
context.getInitParams().put("contextConfigLocation", "classpath:spring/spring-config.xml");
context.addEventListener(new ContextLoaderListener());
try {
server.start();
server.join();
} catch (Exception exception) {
exception.printStackTrace();
System.exit(100);
}
}
当谈到 SSL 和网络时,您 必须在 JVM 和服务器软件中保持最新。浏览器、代理、硬件等中 SSL 支持的快速变化。迫使你。
例如,Jetty 8.1.4 是在 SSL v1、SSL v2 流行的时代创建的。今天,SSL 几乎已被弃用(一直到 SSL v3),取而代之的是 TLS NPN/ALPN 越来越受欢迎。
较新版本的 Jetty 甚至弃用了导致在线问题的各种密码套件。
甚至证书颁发机构 (CA) 也在朝着使旧 SSL 变得无关紧要的方向发展,这使得几乎不可能获得适用于这些旧环境的证书。
我正在尝试让我的嵌入式 Jetty 8.1.4(不,我可以更高!)服务器与 https 一起工作。我使用以下命令生成我的密钥库:
keytool -genkey -alias sitename -keyalg RSA -keystore keystore -keysize 2048
我的问题是,当我 运行 这个时,我得到了一个很好的异常!
WARN - AbstractLifeCycle - FAILED SslContextFactory@160b6dff(null,null): java.io.IOException: Invalid keystore format
java.io.IOException: Invalid keystore format
at sun.security.provider.JavaKeyStore.engineLoad(JavaKeyStore.java:633)
at sun.security.provider.JavaKeyStore$JKS.engineLoad(JavaKeyStore.java:38)
at java.security.KeyStore.load(KeyStore.java:1183)
我尝试按照不同的在线指南生成密钥库,但无济于事。
有什么想法吗?
非常感谢,
AW
这是服务器代码:
public static void main(String[] args) throws Exception {
Server server = new Server();
server.setStopAtShutdown(true);
server.setGracefulShutdown(ALLOWED_SHUTDOWN_TIME);
Resource keystore = Resource.newClassPathResource("/keystore");
SslContextFactory sslContextFactory = new SslContextFactory();
sslContextFactory.setKeyStoreResource(keystore);
sslContextFactory.setKeyStorePassword("wicket");
sslContextFactory.setTrustStoreResource(keystore);
sslContextFactory.setKeyManagerPassword("wicket");
SslSelectChannelConnector connector = new SslSelectChannelConnector(sslContextFactory);
connector.setMaxIdleTime(30000);
connector.setPort(getServerPort());
connector.setAcceptors(4);
connector.setReuseAddress(false);
server.addConnector(connector);
final ServletContextHandler context = new ServletContextHandler(server, "/", ServletContextHandler.SESSIONS);
context.setResourceBase("src/main/webapp");
context.setInitParameter("org.eclipse.jetty.servlet.Default.dirAllowed", "false");
context.getSessionHandler().getSessionManager().setMaxInactiveInterval(60 * 15);
context.getSessionHandler().getSessionManager().setSessionTrackingModes(newHashSet(SessionTrackingMode.COOKIE));
final FilterHolder openSessionInViewFilter = new FilterHolder(new OpenSessionInViewFilter());
context.addFilter(openSessionInViewFilter, "/", EnumSet.of(DispatcherType.REQUEST));
final FilterHolder wicketFilter = new FilterHolder(WicketFilter.class);
wicketFilter.setInitParameter(WicketFilter.FILTER_MAPPING_PARAM, "/*");
wicketFilter.setInitParameter("applicationFactoryClassName", "org.apache.wicket.spring.SpringWebApplicationFactory");
wicketFilter.setInitParameter("configuration", "development");
context.addFilter(wicketFilter, "/*", EnumSet.of(DispatcherType.REQUEST));
context.getInitParams().put("contextConfigLocation", "classpath:spring/spring-config.xml");
context.addEventListener(new ContextLoaderListener());
try {
server.start();
server.join();
} catch (Exception exception) {
exception.printStackTrace();
System.exit(100);
}
}
当谈到 SSL 和网络时,您 必须在 JVM 和服务器软件中保持最新。浏览器、代理、硬件等中 SSL 支持的快速变化。迫使你。
例如,Jetty 8.1.4 是在 SSL v1、SSL v2 流行的时代创建的。今天,SSL 几乎已被弃用(一直到 SSL v3),取而代之的是 TLS NPN/ALPN 越来越受欢迎。
较新版本的 Jetty 甚至弃用了导致在线问题的各种密码套件。
甚至证书颁发机构 (CA) 也在朝着使旧 SSL 变得无关紧要的方向发展,这使得几乎不可能获得适用于这些旧环境的证书。