限制 PCF 中不安全的 Web 套接字协议连接
Restrict insecure web socket protocol connections in PCF
我们在 preprod azure PCF 环境中托管一个应用程序,该环境公开 websocket 端点供客户端设备连接。当托管在 PCF 上并在 PCF HAProxy 后面使用 TLS/SSL 和 运行 时,是否有规定的方法来保护所述 websocket 端点?
我在解释此信息时遇到问题,例如,我们是否应该在服务器上公开端口 4443,PCF 应默认将其选为安全端口以确保无法建立不安全的连接?还是需要在 HAProxy 上进行一些配置?
Is there a prescribed methodology to secure the said websocket endpoint using TLS/SSL when hosted on PCF and running behind the PCF HAProxy?
几件事:
将应用程序部署到 PCF 时,您不需要配置证书或类似的东西。该平台负责所有这些工作。在您的情况下,它可能由 HAProxy 处理,但它可能是其他负载均衡器甚至 Gorouter,具体取决于您的平台运营团队安装的 PCF。最终结果是 TLS 在到达您的应用程序之前首先终止,因此您无需担心。
您的应用应始终强制用户使用 HTTPS。如何执行此操作取决于您使用的 language/framework,但大多数都有一些功能。
此过程通常通过检查传入请求是通过 HTTP 还是 HTTPS 来工作。如果它是 HTTP,那么您将重定向到相同的 URL,但通过 HTTPS。这对所有应用程序都很重要,而不仅仅是使用 WebSockets 的应用程序。加密所有东西。
请记住,您在一个或多个反向代理之后,因此如果您手动执行此操作,则需要考虑 x-forwarded-proto
或 x-forwarded-port
中的内容,而不仅仅是上游连接将是 Gorouter,而不是您客户端的浏览器。
https://docs.pivotal.io/platform/application-service/2-7/concepts/http-routing.html#http-headers
- 如果您强制用户使用 HTTPS(上面的#1),那么您的用户将无法启动与您的应用程序的不安全 WebSocket 连接。 Chrome 和 Firefox 等浏览器具有限制,以防止在通过 HTTPS 加载网站时建立不安全的 WebSocket 连接。
您将在 Firefox 中收到类似 The operation is insecure
或在 Chrome 中收到 Cannot connect: SecurityError: Failed to construct 'WebSocket': An insecure WebSocket connection may not be initiated from a page loaded over HTTPS.
的消息。
I am having trouble interpreting this information, as in, are we supposed to expose port 4443 on the server and PCF shall by default pick it up to be a secure port that ensures unsecured connections cannot be established? Or does it require some configuration to be done on 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。
我们在 preprod azure PCF 环境中托管一个应用程序,该环境公开 websocket 端点供客户端设备连接。当托管在 PCF 上并在 PCF HAProxy 后面使用 TLS/SSL 和 运行 时,是否有规定的方法来保护所述 websocket 端点?
我在解释此信息时遇到问题,例如,我们是否应该在服务器上公开端口 4443,PCF 应默认将其选为安全端口以确保无法建立不安全的连接?还是需要在 HAProxy 上进行一些配置?
Is there a prescribed methodology to secure the said websocket endpoint using TLS/SSL when hosted on PCF and running behind the PCF HAProxy?
几件事:
将应用程序部署到 PCF 时,您不需要配置证书或类似的东西。该平台负责所有这些工作。在您的情况下,它可能由 HAProxy 处理,但它可能是其他负载均衡器甚至 Gorouter,具体取决于您的平台运营团队安装的 PCF。最终结果是 TLS 在到达您的应用程序之前首先终止,因此您无需担心。
您的应用应始终强制用户使用 HTTPS。如何执行此操作取决于您使用的 language/framework,但大多数都有一些功能。
此过程通常通过检查传入请求是通过 HTTP 还是 HTTPS 来工作。如果它是 HTTP,那么您将重定向到相同的 URL,但通过 HTTPS。这对所有应用程序都很重要,而不仅仅是使用 WebSockets 的应用程序。加密所有东西。
请记住,您在一个或多个反向代理之后,因此如果您手动执行此操作,则需要考虑 x-forwarded-proto
或 x-forwarded-port
中的内容,而不仅仅是上游连接将是 Gorouter,而不是您客户端的浏览器。
https://docs.pivotal.io/platform/application-service/2-7/concepts/http-routing.html#http-headers
- 如果您强制用户使用 HTTPS(上面的#1),那么您的用户将无法启动与您的应用程序的不安全 WebSocket 连接。 Chrome 和 Firefox 等浏览器具有限制,以防止在通过 HTTPS 加载网站时建立不安全的 WebSocket 连接。
您将在 Firefox 中收到类似 The operation is insecure
或在 Chrome 中收到 Cannot connect: SecurityError: Failed to construct 'WebSocket': An insecure WebSocket connection may not be initiated from a page loaded over HTTPS.
的消息。
I am having trouble interpreting this information, as in, are we supposed to expose port 4443 on the server and PCF shall by default pick it up to be a secure port that ensures unsecured connections cannot be established? Or does it require some configuration to be done on 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。