安全的 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 连接