vertx HTTPS (SSL/TLS) 服务器不工作。我无法访问 https://localhost

Posted

技术标签:

【中文标题】vertx HTTPS (SSL/TLS) 服务器不工作。我无法访问 https://localhost【英文标题】:vertx HTTPS (SSL/TLS) server does not work. I cannot access https://localhost 【发布时间】:2019-08-21 12:07:22 【问题描述】:

我已经在vert.x创建了HTTPS服务器。

vertx.createHttpServer(
    new HttpServerOptions()
        .setSsl(true)
        .setKeyStoreOptions(new JksOptions()
            .setPath("path/to/keystore")
            .setPassword("password")
        )
).requestHandler( (HttpServerRequest req) -> 
    System.out.println("Access.");
    req.response().putHeader("Content-Type", "text/html; charset=utf-8");
    req.response().end("Hello world!");
    // ...
).listen(80, "localhost");

我已经使用keytool 创建了密钥库。

keytool -genkeypair -keystore keystore -storetype jks

我已经成功部署了verticle。但是服务器没有响应。

对https://localhost 的访问没有任何作用。连日志都没有打印出来。

怎么了?

我已经尝试了以下一些选项。

vertx.createHttpServer(
    new HttpServerOptions()
        .setSsl(true)
        .setKeyStoreOptions(new JksOptions()
            .setPath("path/to/keystore")
            .setPassword("password")
        )
        // .setUseAlpn(true)
        // .setTrustOptions(new JksOptions()
        //  .setPath("C:/Recoeve/keystore")
        //  .setPassword("Xs41Kipid$ps15")
        // )
        // .setClientAuthRequired(false)
        // .setClientAuth(ClientAuth.NONE)
        // .addEnabledSecureTransportProtocol(TCPSSLOptions.DEFAULT_ENABLED_SECURE_TRANSPORT_PROTOCOLS.get(1))
        // .addEnabledSecureTransportProtocol("TLSv1.3")
        // .setEnabledSecureTransportProtocols(TCPSSLOptions.DEFAULT_ENABLED_SECURE_TRANSPORT_PROTOCOLS)
).requestHandler( (HttpServerRequest req) -> 
    // ...
).listen(80, "localhost");

但是代码给出了运行时异常。

【问题讨论】:

尝试使用setLogActivity(true) 并使用日志库查看调试日志。 您希望将日志打印到哪里? “什么都不给”到底是什么意思?提供的源代码不应作为对 SSL/TLS 请求的响应。 @metaphori setLogActivity(true) 给出了这个错误。 null:警告:在类型“io.vertx.codegen.annotations.VertxGen”中找不到注释方法“concrete()”:找不到 io.vertx.codegen.annotations.VertxGen 的类文件 C:\Recoeve\Recoeve.java: 58:错误:找不到符号 .setLogActivity(true) ^ 符号:方法 setLogActivity(boolean) 位置:类 io.vertx.core.http.HttpServerOptions @tmarwen 如果没有 SSL/TLS 设置,此代码可以很好地响应浏览器的 localhost 访问。但是使用 SSL/TLS 设置,它什么也没有。连System.out.println("Access.") 都没有打印出来。 如果服务器提供 https/ssl 它也应该监听端口 443。使用 https 地址时,Web 浏览器访问服务器端口 443。或者您是否尝试过访问https://localhost:80 【参考方案1】:

正如您发布的那样为我工作,但使用以下密钥库生成:

keytool -genkey -alias server-alias -keyalg RSA -keypass changeit -storepass changeit -keystore keystore.jks -validity 3650

【讨论】:

【参考方案2】:

以下代码对我有用:

    JksOptions keyOptions = new JksOptions();
    keyOptions.setPath("path-to-your/keystore.jks");
    keyOptions.setPassword("changeit");

    vertx.createHttpServer(
      new HttpServerOptions()
        .setSsl(true)
        .setKeyStoreOptions(keyOptions)
    ).requestHandler( (HttpServerRequest req) -> 
      System.out.println("Access.");
      req.response().putHeader("Content-Type", "text/html; charset=utf-8");
      req.response().end("Hello SSL world!");
    ).listen(8443, "localhost");

【讨论】:

以上是关于vertx HTTPS (SSL/TLS) 服务器不工作。我无法访问 https://localhost的主要内容,如果未能解决你的问题,请参考以下文章

SSL/TLS深度解析--测试TLS/SSL加密

HTTPS 安全最佳实践之SSL/TLS部署

如何使用 AES-256 在 Spring Boot 上设置 SSL (TLS) / HTTPS?

如何使用 AES-256 在 Spring Boot 上设置 SSL (TLS) / HTTPS?

HTTPS 之 TLS 性能调优

http/1.x,http/2,https,SSL,TLS