如何使用 Aws ELB 使用 SSL 证书保护 Spring Cloud Gateway

How to secure Spring Cloud Gateway with SSL certificate using Aws ELB

目前,我有一个 ec2 实例用作一种 dev/test 服务器,运行 多个微服务。

在这些服务前面,我有一个 Spring 云网关将流量路由到不同的服务。

在 ec2 实例前面,我有一个使用 AWS 配置的应用程序负载均衡器 (ELB),并附有由 AWS Certificate Manager(在 go daddy 托管的域)提供的证书。

如果没有在 lb 上设置 HTTPS,这一切都很好,并且可以完美运行,但是一旦我在 lb 上切换到 HTTPS,我只会得到

502 Bad Gateway

在网关日志中我得到以下异常:

decoding failed: DefaultFullHttpRequest(decodeResult: failure(java.lang.IllegalArgumentException: text is empty (possibly HTTP/0.9)), version: HTTP/1.0, content: UnpooledByteBufAllocator$InstrumentedUnpooledUnsafeHeapByteBuf(ridx: 0, widx: 0, cap: 0))
GET /bad-request HTTP/1.0 :

经过一番搜索,我发现您必须使用以下方法显式启用 SSL:

server:
  ssl:
    enabled: true

但是一旦我这样做了,它似乎需要其余的细节,因为我得到了以下信息。

org.springframework.boot.web.server.WebServerException: Could not load key store 'null'

据我了解,您必须将证书上传到 jvm 证书存储区,但据我所知,问题是您无法导出 AWS Cert Manager 提供的证书。

我之前为 dot-net-core 环境做了完全相同的事情并且没有问题(可能是因为它就像一个网络服务器 运行 它在同一个 docker 图像中)我我不确定如何在 Java 中进行。可能是我的做法不对,这个架构不行。

请协助指出我的问题,或提出解决方案,因为我已用尽所有选择

如果您使用的是 ALB,那么您在 ALB 本身上从 ACM 部署您的 SSL 证书。您的 spring 申请与此无关。在 ALB 上设置 SSL 证书的过程说明如下: