Spring Boot现在可以支持http / 2,但是如果浏览器不支持http / 2,浏览器请求服务器可以使用具有相同http端口的http1.x + ssl吗?当浏览器不支持http / 2时,Nginx可以自动将http / 2降级为http1.x + ssl。 这是Spring Boot问题还是servlet容器问题(tomcat,jetty,Undertow)?
我尝试使用带有http / 2的Spring Boot应用程序进行本地操作,支持http / 2的浏览器可以成功访问,但是不支持http / 2的浏览器的访问状态为“已终止”。
应用信息:
春季启动版本:2.1.0.M4
Servlet容器:默认Apache Tomcat/9.0.12
application.properties:
spring.application.name=spring-test
server.port=8443
server.http2.enabled=true
server.ssl.key-store=classpath:testkeystore.jks
server.ssl.key-store-password=test
server.ssl.key-password=test
浏览器支持http / 2:Chrome,版本:66.0.3359.139
浏览器不支持http / 2:Firefox,版本:30.0
答案 0 :(得分:1)
这更多是一个容器问题-尽管根据具体问题,Spring Boot也许可以在配置服务器方面提供帮助。
您所描述的核心问题是:如果服务器同时支持http / 2和http / 1.1,则它仍然必须对密码套件强制执行最低要求,否则攻击者可能会迫使客户端降级。安全性并使用破解的密码。
如此有效,您所担心的HTTP客户端的种类每天都在减少。支持这些现代密码的客户端也支持http / 2。例如,in the latest Jetty release, all TLS_RSA ciphers are now excluded by default。