带有 https 的嵌入式码头:密钥库格式无效



我正在尝试让我的嵌入式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)

我尝试按照不同的在线指南生成密钥库,但无济于事。

有什么想法吗?

非常感谢,

这是服务器代码:

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和Web时,你必须在JVM和服务器软件中保持最新状态。 浏览器、代理、硬件等中 SSL 中支持的内容的快速变化。强迫你。

例如,Jetty 8.1.4 是在 SSL v1 时代创建的,SSL v2 很流行。 今天,SSL几乎被弃用(一直到SSL v3),取而代之的是TLS,NPN/ALPN越来越受欢迎。

较新版本的Jetty甚至弃用了导致在线问题的各种密码套件。

甚至证书颁发机构(CA)也在朝着使旧SSL无关紧要的方向发展,因此几乎不可能获得适用于这些旧环境的证书。

最新更新