我正在使用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吗?有没有办法为我的密钥库和密钥指定不同的密码?还是我必须为两者设置相同的密码?