我有一个 Angular - Spring Boot 应用程序。在后端(Spring Boot 应用程序)能够在 AWS 负载均衡器上使用 AWS jar 装 SSL 证书(“example.com”),该负载均衡器监听 443 端口上的传入 https 流量。另一方面,在前端(Angular 应用程序)中,我有一个使用相同 SSL 证书(“example.com”)的 S3 站点。
当我去 https://example.com我的网站加载正常,并通过 url 显示 https 安全绿色标签(前端使用也使用 SSL 证书(“example.com”))。
但是,当我的前端转到负载均衡器的地址时,它看起来像:
https://load-balancer-xxxxxx.us-east-1.elb.amazonaws.com
换句话说,当我的前端向后端请愿时,我收到以下错误:
net::ERR_CERT_COMMON_NAME_INVALID
然后是由于我的网站的认证 url 不包含域 *.amazonaws.com 导致的错误吗?如果这是原因。如何防止浏览器显示 ERR_CERT_COMMON_NAME_INVALID?如果有必要,前端将从 https://example 发出请求至https://load-balancer-xxxxxx.us-east-1.elb.amazonaws.com
那是我的 DNS 配置:
注意:我已经安装了单域 SSL 证书。
最佳答案
我已经在其他地方发布了这个答案,但我也想在这里发布
我已经花了大约一周的时间尝试自己解决这些问题——我使用的是 React 而不是 Angular,但步骤应该是相同的。
这是我解决它的方法,其中一些也可能对你有用。它最终主要是配置问题。
这里的关键之一是您需要已经拥有一个域,并且您需要能够修改域的 DNS。大多数主机将允许您这样做。所以我拥有www.example.com
我需要做的是创建一个CNAME
路由的 DNS 记录 ops.example.come
至my-site.my-aws-region-1.elasticbeanstalk.com
然后,当我在 AWS Cert Manager 中创建我的 SSL 证书时,我给它的名称是 ops.example.com
但理论上 *.example.com
本来也可以的。
然后,最终成为整个事情的关键是,为了使 HTTPS 工作,您的负载均衡器必须在 443 上监听 HTTPS,并在 80 上通过 HTTP 路由到实例。
亚马逊试图告诉我这一点,但因为我是个菜鸟,而且因为他们的教程是我整个职业生涯中读过的最糟糕的教程,他们实际上并没有将你的任何安全端口暴露给互联网。这实际上很好,因为您的流量一直被加密到负载均衡器,然后在此之后,即使它不再是 HTTPS,它也已经在亚马逊的服务器上,因此它的安全性并没有降低。
希望这里有帮助!
关于amazon-web-services - Angular AWS APP中的ERR_CERT_COMMON_NAME_INVALID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54954917/