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

时间:2015-01-16 19:59:29

标签: https jetty wicket embedded-jetty

我试图让我的嵌入式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);
    }
}

1 个答案:

答案 0 :(得分:0)

对于SSL和网络,您在JVM和服务器软件中必须保持当前。浏览器,代理,硬件等SSL中支持的内容的快速变化迫使您。

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

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

即使是证书颁发机构(CA)也在朝着使旧SSL无关的方向前进,这使得几乎不可能获得适用于这些旧环境的证书。

相关问题