目前,我有一个ec2实例作为一种开发/测试服务器,运行多个微服务。
在这些服务之前,我有一个Spring云网关,将流量路由到不同的服务。
在ec2实例前面,我有一个应用程序负载均衡器(ELB(,它配置了AWS,并附带了由AWS证书管理器提供的证书(托管在go-ddaddy中的域(。
如果没有在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核心环境做过完全相同的事情,没有遇到任何问题(可能是因为它就像一个web服务器在同一个docker映像中运行它(,我不知道如何在Java中继续。也许我的方法是错误的,这个体系结构无法工作。
请协助指出我的问题,或建议一个解决方案,因为我已经用尽了所有的选择
如果您正在使用ALB,则将来自ACM的SSL证书部署在ALB本身上。你的春季申请与此无关。在ALB上设置SSL证书的过程说明如下:
- 如何将ACM SSL/TLS证书与Classic、Application或Network Load Balancer关联