【发布时间】:2022-01-19 07:17:57
【问题描述】:
我是 AWS 和整个部署工作的新手,我在一周左右的时间里一直在苦苦挣扎,通过以下场景(也在附图中描述)达到以下目标:
一方面,我有一个安装了 Apache Tomcat 的 aws ec2 实例。在 tomcat webapp 目录中,我创建了一个所谓的 webapp,但实际上只有一个包含一点 HTML、CSS 和 javascript 的网站。我们称其为 webapp testabc。例如,实例的公有 IPv4 DNS 为 ec2-1-23-45-678.eu-central-1.compute.amazonaws.com。在 tomcat server.xml 中,我将连接器端口更改为 80,以便可以在 http://ec2-1-23-45-678.eu-central-1.compute.amazonaws.com 下访问我的 tomcat 起始页,并且可以在 http://ec2-1-23-45-678.eu-central-1.compute.amazonaws.com/testabc 下访问 webapp。
另一方面,我注册了一个我们称之为示例 testabc.com 的域和一个子域 app.testabc.com。提供者是 IONOS。我还在 IONOS 上为 *.testabc.com 注册了通配符证书。我现在想要达到的是,ec2 实例上的 webapp testabc 可以通过https://app.testabc.com/testabc 安全访问。首先,我在 IONOS 中向公共 IPv4 DNS 注册了一条 CNAME 记录,因此当我输入 app.testabc.com/testabc 时,已经可以转发到 ec2 实例上的 webapp。但我现在正在努力实现 HTTPS。你能推荐我做什么?
到目前为止,我已经尝试了一些方法,但以下方法对我没有任何效果:
- 首先假设有必要先实现对 ec2 DNS 的 HTTPS 访问,然后才能通过 app.testabc.com 实现 HTTPS 访问(不知道这是不是真的?)我添加了安全性我的 ec2 实例的安全组中针对端口 443 的规则,并添加了 0.0.0.0\0 和 ::\0 作为源。此外,我在 tomcat conf 目录中添加了对 server.xml 的重定向:
<Connector port="80" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="443"/>。但仅此一项是行不通的。 - 在网上我发现在tomcat webapp上实现HTTPS访问需要ssl证书。所以我做出的假设是我必须获得 ec2-1-23-45-678.eu-central-1.compute.amazonaws.com 的 ssl 证书。所以我按照这个视频https://www.youtube.com/watch?v=ke1SgU_HY80&t=14s 的说明进行操作,结果是我可以通过https://ec2-1-23-45-678.eu-central-1.compute.amazonaws.com/testabc 甚至通过https://app.testabc.com/testabc 访问,但是在浏览器中弹出了一个警告,表明该网站不安全。我发现自签名证书会引发此错误,因此这对我也不起作用。
- 我发现 ca 证书是不会引发此错误的替代方案。所以我尝试通过 zerossl 创建一个。使用这种类型的证书,您必须验证您是 DNS 的所有者。我发现您必须是“根”DNS 的所有者,在我的例子中是 amazonaws.com。因为我不是这个域的所有者,所以这当然也不适合我。
- 接下来我发现 AWS 中的负载均衡器可以做到这一点。所以我按照https://www.youtube.com/watch?v=QA4X8ntcNBQ的指示。在本教程中,您还必须通过 ACM 生成 ssl 证书。在这里,证书链接到用户拥有的域。在我的情况下,这将是 app.testabc.com 让我感到困惑,因为已经有一个通配符证书通过 IONOS 处于活动状态。尽管如此,我还是按照说明进行操作,但是在创建负载均衡器后我不知道如何继续,因为据说您必须在 Apache 服务器中配置一些东西,但我没有 Apache,而是 Tomcat,所以我没有得到那我应该怎么做。所以我问了另一个关于堆栈溢出的问题来得到它,但这只会让我想到我已经尝试过的事情。例如,通过 Cloudflare 制作 SSL 证书,但这不起作用,因为您无法在此处保护域 ec2-1-23-45-678.eu-central-1.compute.amazonaws.com 可能是因为第 3 点中的解释。
因此,在仅通过一些 youtube 教程和堆栈溢出线程的知识完成所有这些之后,我完全感到困惑,并且还猜测我做出了错误的基本假设,导致我走上了完全错误的道路。实现 HTTPS 对我来说听起来很基础,因为这对我来说是每个网站和 web 应用程序都有的要求。以我的经验,我在最后几天感觉就像你在它们之间建立了如此多的组件和桥梁来实现这一基本要求。我现在有三个正在运行的 ssl 证书(一个来自 IONOS,一个来自 ACM 和一个自签名证书),两个使用 Cloudflare 和 zerossl 的证书生成试验,但没有奏效,一个负载平衡器,我离获得 HTTPS 访问权限还很远我的 webapp 通过我自己的子域,没有任何警告和错误。希望您能帮助我了解我做错了什么并引导我走上正确的道路。
【问题讨论】:
标签: ssl tomcat amazon-ec2 https