Vertx HTTPS服务器,密钥密码不同于密钥库密钥密码

时间:2018-07-20 09:11:06

标签: java https keystore jks jsse

我正在使用vertx 3.5.3。 我正在尝试为简单的vertx HTTP服务器启用HTTPS。我有一个密钥存储,比方说keystore.jks受密码keystore_password保护。该密钥存储区包含一个密钥,该密钥受与key_password不同的密码keystore_passord保护。

我正在这样配置我的HTTP服务器:

    JksOptions keystoreOptions = new JksOptions()
        .setPath(get("http.server.keystore"))
        .setPassword(get("http.server.keystore.password"));

    HttpServerOptions httpServerOptions = new HttpServerOptions()
            .setSsl(true)
            .setKeyStoreOptions(keystoreOptions);

   vertx.createHttpServer(httpServerOptions)
    .requestHandler(req -> req.response().end("Hello World!"))
    .listen(8080, res -> {
        if (res.succeeded()) {
            startFuture.complete();
        } else {
            startFuture.fail(res.cause());
            System.out.println(res.cause());
        }
    });

我的服务器无法启动,并且出现以下异常java.security.UnrecoverableKeyException: Cannot recover key。我可以从vertx代码中看到,我的密钥存储区已加载了keystoreOptions中的密码:

  return new KeyStoreHelper(loadJKSOrPKCS12("JKS", jks.getPassword(), value), jks.getPassword());

KeyStoreHelper.java,方法public static KeyStoreHelper create(VertxInternal vertx, KeyCertOptions options)

加载密钥存储区后,我还可以看到在类KeyStoreHelper.java中以相同的密码加载了密钥:

KeyManagerFactory fact = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm());
fact.init(store, password != null ? password.toCharArray(): null);

我使用正确的方法来配置HTTPS吗?有没有办法为我的密钥库和密钥指定不同的密码?还是我必须为两者设置相同的密码?

0 个答案:

没有答案