安全的 Websocket 连接 (wss:) 在 tomcat / spring 中中止,而 https 正在工作

Posted

技术标签:

【中文标题】安全的 Websocket 连接 (wss:) 在 tomcat / spring 中中止,而 https 正在工作【英文标题】:Secured Websocket connections (wss:) abort in tomcat / spring, while https is working 【发布时间】:2017-12-09 13:20:03 【问题描述】:

在我们的应用程序中,如果建立为 wss: 的 websocket 连接将被中止,而 ws: 工作正常。

通常,websocket 在几分钟内不再打开。有时最多传输 20-30 帧,有时在再次关闭之前只有一个或没有。 http 响应代码是 101(大多数情况下,有时它似乎在任何内容发送到客户端之前就已中止,在这少数情况下,chrome 网络面板显示刚刚“完成”)。

错误信息各不相同:

javax.net.ssl.SSLException: error:1407609C:SSL routines:SSL23_GET_CLIENT_HELLO:http request

(4000 倍)

javax.net.ssl.SSLException: error:140760FC:SSL routines:SSL23_GET_CLIENT_HELLO:unknown protocol

(1x)

javax.net.ssl.SSLException: error:140940E5:SSL routines:ssl3_read_bytes:ssl handshake failure

(10 倍)

javax.net.ssl.SSLException: error:140E0197:SSL routines:SSL_shutdown:shutdown while in init

(3000 倍)

客户端收到一个 onClose(不是 onError)。

Chrome 调试器列表

https://our.domain 具有有效证书的“安全”,而 wss://our.domain 为“未知/已取消”

我试过了

铬 62 火狐57

(并且:当客户端在服务器的机器上本地运行时会发生相同的行为,因此它不可能是网络问题。)

后端是 tomcat / spring,运行在 AWS EC2 Windows 服务器上。

我会很感激任何帮助 :-) https 和 wss 之间可能有什么区别?

【问题讨论】:

事实上,这个问题似乎只发生在我们的服务器运行的 AWS 主机上,在本地运行良好......当然...... 我在 Windows 机器上遇到了同样的问题。 【参考方案1】:

事实上,我们通过将服务器移动到 Ubuntu 机器上解决了这个问题(顺便说一下,这需要显着减少 tomcat 的内存).....不过我真的很想知道 windows 机器上的问题是什么。

【讨论】:

【参考方案2】:

在tomcat 8.5.23上我得到了

javax.net.ssl.SSLException: error:140E0197:SSL routines:SSL_shutdown:shutdown while init

更新到 8.5.27 或 9.0.4 为我解决了这个问题。我猜他们对解决问题的 OpenSSLEngine 做了一些更改。

【讨论】:

谢谢你的提示,我试试这个。 查看 tomcat 更改日志 (tomcat.apache.org/tomcat-8.5-doc/changelog.html) 似乎主要的 SSL 更新是在 8.5.24 中,这是我们正在使用的版本。不过,我会看看使用当前的 tomcat 版本会发生什么。

以上是关于安全的 Websocket 连接 (wss:) 在 tomcat / spring 中中止,而 https 正在工作的主要内容,如果未能解决你的问题,请参考以下文章

使用多域 SSL SAN 证书无法在 Chrome 中建立 wss websocket 连接

如何创建安全(TLS/SSL)Websocket 服务器

在 SSL WebSocket 连接 (wss) 中拦截请求

WebSocket 安全本地主机连接

WebSocket 安全本地主机连接

如何使用 PHP 设置 WebSocket 安全连接?