0

我们在 preprod azure PCF 环境中托管一个应用程序,该环境公开 websocket 端点以供客户端设备连接。当托管在 PCF 上并在 PCF HAProxy 后面运行时,是否有规定的方法来使用 TLS/SSL 保护所述 websocket 端点?

我在解释此信息时遇到了麻烦,例如,我们是否应该在服务器上公开端口 4443,而 PCF 应默认将其选为安全端口,以确保无法建立不安全的连接?还是需要在 HAProxy 上进行一些配置?

4

1 回答 1

0

当托管在 PCF 上并在 PCF HAProxy 后面运行时,是否有规定的方法来使用 TLS/SSL 保护所述 websocket 端点?

一些东西:

  1. 将您的应用程序部署到 PCF 时,您不需要配置证书或类似的东西。该平台负责所有这些。在您的情况下,它可能由 HAProxy 处理,但也可能是其他负载均衡器,甚至是 Gorouter,具体取决于您的平台运营团队安装的 PCF。最终结果是 TLS 在到达您的应用程序之前首先被终止,因此您无需担心。

  2. 您的应用应始终强制用户使用 HTTPS。你如何做到这一点取决于你使用的语言/框架,但大多数都有一些功能。

此过程通常通过检查传入请求是通过 HTTP 还是 HTTPS 来工作。如果是 HTTP,那么您发出重定向到相同的 URL,但通过 HTTPS。这对所有应用程序都很重要,而不仅仅是使用 WebSockets 的应用程序。加密所有的东西。

请记住,您背后有一个或多个反向代理,因此如果您手动执行此操作,则需要考虑x-forwarded-protoor中的内容x-forwarded-port,而不仅仅是 Gorouter 的上游连接,而不是您客户端的浏览器。

https://docs.pivotal.io/platform/application-service/2-7/concepts/http-routing.html#http-headers

  1. 如果您强制用户使用 HTTPS(上面的#1),那么您的用户将无法启动与您的应用程序的不安全 WebSocket 连接。Chrome 和 Firefox 等浏览器有限制,以防止在通过 HTTPS 加载站点时建立不安全的 WebSocket 连接。

您会收到类似The operation is insecureFirefox 或Cannot connect: SecurityError: Failed to construct 'WebSocket': An insecure WebSocket connection may not be initiated from a page loaded over HTTPS.Chrome 中的消息。

我在解释此信息时遇到了麻烦,例如,我们是否应该在服务器上公开端口 4443,而 PCF 应默认将其选为安全端口,以确保无法建立不安全的连接?还是需要在 HAProxy 上进行一些配置?

从应用程序的角度来看,您没有做任何不同的事情。您的应用程序应该在分配的端口上启动并侦听,即$PORT. 对于 HTTP、HTTP、WS 和 WSS 流量也是如此。简而言之,作为应用程序开发人员,您在部署到 PCF 时无需考虑这一点。

唯一的例外是,如果您的平台运营团队使用本身不支持 WebSockets 的负载均衡器。在这种情况下,要解决他们需要分离流量的问题。HTTP 和 HTTPS 使用传统的端口 80 和 443,它们将在不同的端口上路由 WebSocket。PCF 文档建议使用 4443,您可能会看到该端口。我不能告诉你你的平台是否是这样设置的,但如果你知道你正在使用 HAproxy,那可能不是。

https://docs.pivotal.io/platform/application-service/2-8/adminguide/supporting-websockets.html

无论如何,如果您不知道,只需推送一个应用程序并尝试通过端口 443 启动一个安全的 WebSocket 连接,看看它是否有效。如果失败,请尝试 4443 并查看是否有效。那或询问您的平台运营团队。

对于它的价值,即使您需要使用端口 4443,在 PCF 上运行的应用程序也没有什么区别。唯一的区别在于启动 WebSocket 连接的 JavaScript 代码。它需要知道使用端口 4443 而不是默认的 443。

于 2020-01-23T14:10:21.313 回答