带有 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的主要内容,如果未能解决你的问题,请参考以下文章
iis urlrewrite HTTPS,除了服务(.asmx 和 .svc)或带有参数/值的特定服务
如何从 http 或 https 请求中获取带有端口的主机名
Spring Boot 2.1 和 Java 11 中的 Bean 生命周期