我正在尝试测试Vertx HttpServer和HttpClient之间的SSL连接。因为我没有任何证书,所以创建了一些自签名证书,如下所示:
keytool -genkeypair -alias selfsigned -keyalg RSA -keystore keystore.jks -storepass pass -keysize 2048 -validity 360
我已经生成了一个公共证书,
keytool -export -alias selfsigned -keystore keystore.jks -rfc -file public.cert
然后我
keytool -import -file public.cert -alias public -keystore trustStore.jks
然后,我尝试将它们作为JksOptions以我可以想象的任何顺序添加到服务器和客户端,并且它们在客户端均产生相同的错误:
未来{原因=无法创建SSL连接}
我不明白我做错了什么,而且我对密钥库和信任库的了解不多,任何组合都不适用于我的程序。如果将客户端设置为trustAll(true)
,则连接成功。
以下是服务器和客户端的设置:
HttpServerOptions httpServerOptions = new HttpServerOptions();
JksOptions options = new JksOptions();
options
.setPassword("pass")
.setPath("src/main/resources/file/keystore.jks");
httpServerOptions
.setSsl(true)
.setKeyStoreOptions(options);
HttpClientOptions httpClientOptions = new HttpClientOptions();
JksOptions options = new JksOptions();
options
.setPassword("pass")
.setPath("src/main/resources/file/trustStore.jks");
HttpClient client = vertx.createHttpClient(httpClientOptions
.setSsl(true)
.setTrustStoreOptions(options)
);
上面的代码出现在2个单独的Verticles中,并且分别运行。可能是什么问题?
client.webSocket(8080, "127.0.0.1",...
.setVerifyHost(false)
,结果相同答案 0 :(得分:1)
以下是创建自签名证书和使用in vertx所需的步骤。 准备密钥库:
keytool -genkey -alias server-alias -keyalg RSA -keypass changeit -storepass changeit -keystore keystore.jks
keytool -export -alias server-alias -storepass changeit -file server.cer -keystore keystore.jks
keytool -import -v -trustcacerts -alias server-alias -file server.cer -keystore cacerts.jks -keypass changeit -storepass changeit
这是顶点代码:
vertx.createHttpServer(new HttpServerOptions()
.setSsl(true)
.setKeyStoreOptions(new JksOptions().setPassword("changeit")
.setPath("keystore.jks")))
.requestHandler(req -> req.response().end("Hello!"))
.listen(9999, "127.0.0.1");
HttpClient client = vertx.createHttpClient(new HttpClientOptions()
.setVerifyHost(false)
.setSsl(true)
.setTrustStoreOptions(new JksOptions().setPassword("changeit")
.setPath("keystore.jks")));