当我尝试在Chrome或Firefox中查看我的http2网页时,我目前收到一个错误页面,说:"ERR_SPDY_INADEQUATE_TRANSPORT_SECURITY"
这显然意味着我的Undertow网络服务器正在使用的密码套件由于太不安全而被浏览器不接受。
如何设置Undertow的TLS级别并选择它应该使用的密码?如果我通过谷歌搜索正确理解,这与我创建证书的方式几乎没有关系,并且在 HTTP2 之外,SSL 连接确实工作正常。
通过使用Undertow.builder()
你想要的setSocketOption
方法如下:
Undertow.builder()//add your build code like https listener, server options, etc
.setSocketOption(Options.SSL_ENABLED_PROTOCOLS, Sequence.of("TLSv1.2","TLSv1.3"))
.setSocketOption(Options.SSL_ENABLED_CIPHER_SUITES,Sequence.of(// your cipher suites))
上述调用将禁用 1.2 以下的所有 TLS 版本,并且仅启用您想要的密码套件,setSocketOption
XNIO 级别工作,这是 undertow 的传输层,Options
和 Sequence
类也来自 XNIO。
请注意,我已经添加了TLS 1.3,这是截至撰写本文时的最新版本,并且受所有常青浏览器(但不包括IE)的支持。 请务必使用支持它的提供程序,如果您使用的是JDK SSL提供程序,请确保使用的是Java 11 +.,否则请参阅提供程序的文档,支持TLS1.3的SSL提供程序是Google Conscrypt 在这里找到。
需要注意的一件事是,如果您的 SSL 提供商支持,则设置启用的密码套件可以工作,就我而言,我使用 google Conscrypt,但他们不支持为 TLS1.3 设置启用的密码套件,在他们的文档中他们说他们忽略了该选项,但在我的情况下,undertow 服务器完全停止工作,所以请查阅您的提供商文档或更好的只是设置启用的协议,因为这是您可能想要的。