无法与 Vertx 服务器和客户端建立 SSL 连接

Cannot create SSL connection with Vertx server and client

我正在尝试测试 Vertx HttpServer 和 HttpClient 之间的 SSL 连接。因为我没有任何证书,所以我创建了一些这样的自签名证书:

keytool -genkeypair -alias selfsigned -keyalg RSA -keystore keystore.jks -storepass pass -keysize 2048 -validity 360

我已经生成了一个 public 证书:

keytool -export -alias selfsigned -keystore keystore.jks -rfc -file public.cert

然后我

keytool -import -file public.cert -alias public -keystore trustStore.jks

然后我尝试以我能想象的任何可能的顺序将它们作为 JksOptions 添加到服务器和客户端,并且它们都在客户端生成相同的错误:

Future{cause=Failed to create SSL connection}

我不明白我做错了什么,而且就我所读到的有关密钥库和信任库的内容而言,任何组合都不适用于我的程序。如果我将客户端设置为 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 个独立的 Verticle 中,并且是 运行 分开的。可能是什么问题?

以下是创建自签名证书和使用 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代码:

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")));