带有 Java 11、HTTPS 和 HTTP 2.0 的 Spring Boot 2

Posted

技术标签:

【中文标题】带有 Java 11、HTTPS 和 HTTP 2.0 的 Spring Boot 2【英文标题】:Spring Boot 2 with Java 11, HTTPS and HTTP 2.0 【发布时间】:2019-07-08 06:29:18 【问题描述】:

我有一个 Spring Boot 2 (2.1.2) 应用程序并使用内置的 Tomcat。我只想使用配置文件条目启用 HTTP2:

server.http2.enabled=true

我们还切换到了 OpenJDK 11。我们使用 Let's Encrypt 证书。

如果未配置端口,一切正常,因此我们的应用程序在端口 8080 上启动。我们的应用程序可以很好地与 HTTP2 和 HTTPS 配合使用。 如果我将端口更改为默认的 https 端口 443,则应用程序将启动并侦听端口 443:

netstat -lnp | grep 3352
tcp6       0      0 xxx.xxx.xxx.xxx:443      :::*                    LISTEN      3352/java

但是,如果我尝试访问该站点,则会收到 SSL 错误(安全连接失败)。

对于 Java 1.8,它在端口 443 上运行良好。(当然 HTTP2 在这种情况下不工作。)

知道我该怎么做吗?

【问题讨论】:

【参考方案1】:

如果您使用的是 Java 11,则可能存在证书问题,需要 -keyalg 标志和 keytool 来生成证书,否则,密钥将使用旧的默认 DSA 加密,TLS1 不再允许这样做。 3.使用 RSA 就可以了。

从 Java 11 开始,TLS1.3 是 JSSE 中 SSL 套接字的新默认加密方案,当它可以协商时。 TLS1.3 不再支持 DSA

【讨论】:

以上是关于带有 Java 11、HTTPS 和 HTTP 2.0 的 Spring Boot 2的主要内容,如果未能解决你的问题,请参考以下文章

Java - 带有代码的令牌流 OAuth 2 E2E

iis urlrewrite HTTPS,除了服务(.asmx 和 .svc)或带有参数/值的特定服务

如何从 http 或 https 请求中获取带有端口的主机名

Spring Boot 2.1 和 Java 11 中的 Bean 生命周期

带有 HTTP 和 HTTPS 基本 URL 的 AFHTTPRequestOperationManager

java 11 标准Java异步HTTP客户端