Spring AWS ALB-安全Web套接字+;弹簧靴

Spring AWS ALB-安全Web套接字+;弹簧靴,spring,amazon-web-services,spring-boot,spring-websocket,aws-application-load-balancer,Spring,Amazon Web Services,Spring Boot,Spring Websocket,Aws Application Load Balancer,环境设置: 我在AWS ALB(应用程序负载平衡器)后面有一个Spring引导应用程序。ALB被配置为使用Spring引导应用程序作为在HTTP上运行的目标向世界转发HTTPs 连接图: HTTPS443->ALB->HTTP8080->Spring引导 问题: 由于应用程序在HTTP内部(8080)上运行,但通过负载平衡器在HTTPs上提供服务,我无法使用ws://example.com协议t,因为浏览器中存在混合内容限制。我也不能使用'wss://example.com'由于终端服务器(Sp

环境设置:

我在AWS ALB(应用程序负载平衡器)后面有一个Spring引导应用程序。ALB被配置为使用Spring引导应用程序作为在HTTP上运行的目标向世界转发HTTPs

连接图:

HTTPS443->ALB->HTTP8080->Spring引导

问题:

由于应用程序在HTTP内部(8080)上运行,但通过负载平衡器在HTTPs上提供服务,我无法使用ws://example.com协议t,因为浏览器中存在混合内容限制。我也不能使用'wss://example.com'由于终端服务器(Spring Boot)正在HTTP上运行,is不接受连接

问题:

我找到的唯一解决方案是将最终应用程序移动到使用带有自签名证书的HTTPs。是否有一种替代解决方案可以使应用程序在HTTP上运行,但接受WSS连接?

  • 将负载平衡器配置为将HTTPS流量转发到HTTP将不适用于WebSocket。相反,您必须将其配置为将SSL(安全TCP)转发到TCP。这将适用于HTTP/HTTPS流量,因为HTTP是TCP上的协议,HTTPS是带有TLS的HTTP,它将允许websocket流量通过

  • 将ELB配置为使用代理协议。使用AWS CLI

    首先,创建新策略:

aws elb创建负载平衡器策略\--负载平衡器名称$ALB_名称
--策略名称$ALB_name-proxy-protocol \--策略类型名称ProxyProtocolPolicyType \--策略属性 AttributeName=ProxyProtocol,AttributeValue=True

其次,将其连接到负载平衡器。对实例正在侦听的每个端口运行一次:

aws elb为后端服务器设置负载平衡器策略
--负载平衡器名称$ALB_name \--实例端口8080 \--策略名称$ALB_name-proxy-protocol

  • 将负载平衡器配置为将HTTPS流量转发到HTTP将不适用于WebSocket。相反,您必须将其配置为将SSL(安全TCP)转发到TCP。这将适用于HTTP/HTTPS流量,因为HTTP是TCP上的协议,HTTPS是带有TLS的HTTP,它将允许websocket流量通过

  • 将ELB配置为使用代理协议。使用AWS CLI

    首先,创建新策略:

aws elb创建负载平衡器策略\--负载平衡器名称$ALB_名称
--策略名称$ALB_name-proxy-protocol \--策略类型名称ProxyProtocolPolicyType \--策略属性 AttributeName=ProxyProtocol,AttributeValue=True

其次,将其连接到负载平衡器。对实例正在侦听的每个端口运行一次:

aws elb为后端服务器设置负载平衡器策略
--负载平衡器名称$ALB_name \--实例端口8080 \--策略名称$ALB_name-proxy-protocol