在我的 Web 应用程序中,加密不是由应用程序服务器进行的,而是由反向代理进行的。我想保持这种状态。相关技术栈如下:
- 应用服务器:payara 5.181 full
- Java EE 8/JSF 2.3;莫哈拉 2.4.0-m01.payara-p5
由于代理加密,应用服务器被配置为不在 web.xml 中使用加密:
<user-data-constraint>
<transport-guarantee>NONE</transport-guarantee>
</user-data-constraint>
现在,websocket 连接无法与活动代理一起使用,因为它是由客户端以非加密方式 (ws://...) 建立的。当内容已经在 https 中交付时,浏览器会阻止此操作。
据我了解,浏览器和应用服务器的行为似乎都是正确的。虽然浏览器避免降级,但 websocket 规范的第 8.3 节“传输保证”指出:
容器必须将 NONE 的传输保证解释为允许未加密的 ws:// 连接到 websocket [WSC-8.3-1]
有没有办法为 f:websocket 强制加密(使用 wss://),尽管在应用服务器上使用传输保证 NONE?或者有另一种设置或更好的方法吗?
目前,我找不到调整 f:websocket 行为的方法,不得不切换回使用普通的 javascript websocket 和经典的 websocket serverendpoint。