Amazon EC2 中的 HTTPS 设置

Posted

技术标签:

【中文标题】Amazon EC2 中的 HTTPS 设置【英文标题】:HTTPS setup in Amazon EC2 【发布时间】:2011-07-15 15:49:09 【问题描述】:

我们如何在 Amazon EC2 中启用 HTTPS?我们的网站正在使用 HTTP。

【问题讨论】:

好问题,但我设置了安全组,但没有任何魅力发生 我通过在负载均衡器上配置一个监听器来监听端口 443 上的 HTTPS 请求,从而解决了这个问题。不过,它是针对 Elastic Beanstalk 的,我按照这里的教程进行操作 mydaytodo.com/how-to-deploy-spring-boot-aws-serve-https 【参考方案1】:

您需要注册一个域(例如在 GoDaddy 上)并在您的 ec2 实例前面放置一个负载均衡器 - 正如 DigaoParceiro 在他的回答中所说。

问题是亚马逊在您的 ec2 实例上生成的域是短暂的。今天域名属于你,明天可能不属于你。

因此,当您尝试在亚马逊生成的域上注册证书时,让我们加密会引发错误:

The ACME server refuses to issue a certificate for this domain name, because it is forbidden by policy

更多细节在这里: https://community.letsencrypt.org/t/policy-forbids-issuing-for-name-on-amazon-ec2-domain/12692/4

【讨论】:

【参考方案2】:

此答案主要针对在其他站点(如 GoDaddy)购买域并希望将亚马逊免费证书与证书管理器一起使用的人

此答案使用 Amazon Classic Load Balancer(付费)see the pricing before using it


第 1 步 - 向证书管理器申请证书

转到证书管理器 > 申请证书 > 申请公共证书

在域名上,您将添加 myprojectdomainname.com*.myprojectdomainname.com 并继续下一步

选择电子邮件验证并确认和请求

打开您收到的电子邮件(在您购买域名的电子邮件帐户上)并批准请求

之后,检查myprojectdomainname.com*.myprojectdomainname.com的验证状态是否成功,如果成功则可以继续步骤2

第 2 步 - 为负载均衡器创建安全组

在 EC2 上转到安全组 > 并创建一个安全组并添加 http 和 https 入站

它会是这样的:

第 3 步 - 创建负载均衡器

EC2 > 负载均衡器 > 创建负载均衡器 > 经典负载均衡器(第三个选项)

在里面创建 LB - 你项目的 vpc 在负载均衡器协议上添加 Http 和 Https

下一步 > 选择退出的安全组

选择您在上一步中创建的安全组

下一步 > 从 ACM 中选择证书

选择第1步的证书

下一步 >

在健康检查中我使用了 ping 路径 /(一个斜线而不是 /index.html

第 4 步 - 将您的实例与负载均衡器的安全组关联

EC2 > 实例 > 单击您的项目 > 操作 > 网络 > 更改安全组

添加负载均衡器的安全组

第 5 步

EC2 > 负载均衡器 > 点击您创建的负载均衡器 > 复制 DNS 名称(A 记录),它将类似于 myproject-2021611191.us-east-1.elb.amazonaws.com

转到 Route 53 > Routes Zones > 单击域名 > 转到记录集 (如果您在此处没有您的域,请使用 Domain Name: myprojectdomainname.comType: Public Hosted Zone 创建一个托管区域)

检查您是否有记录类型 A(可能没有),创建/编辑名称为空的记录集,类型 A,别名是,然后定位您复制的 dns

还创建一个类型为 A 的新记录集,名称为 *.myprojectdomainname.com,别名是,并以您的域为目标 (myprojectdomainname.com)。这将使您可以使用 www.myprojectdomainname.com 和 subsite.myprojectdomainname.com 访问您的站点。注意:您需要配置反向代理 (nginx/Apache) 才能这样做。

在 NS 上复制 4 个名称服务器值以在下一步中使用,它将类似于:

ns-362.awsdns-45.com ns-1558.awsdns-02.co.uk ns-737.awsdns-28.net ns-1522.awsdns-62.org

转到 EC2 > Instances > 并复制 IPv4 公共 IP

第 6 步

在您购买域名的域名注册网站上(在我的例子中是 GoDaddy)

将路由更改为http : <Your IPv4 Public IP Number> 并选择 Forward with masking

将名称服务器 (NS) 更改为您复制的 4 个 NS,这可能需要 48 小时才能生效

【讨论】:

如果我想要 https,是否必须使用负载均衡器? 我做了所有这些,但是当我在浏览器中访问我的域时,我得到了 ERR_CONNECTION_TIMED_OUT 我需要在端口 80 上使用新的目标组创建负载均衡器,然后编辑侦听器以使用端口 80。现在可以使用。谢谢。 @Curtis 负载均衡器不是使用 https 的唯一选项,您还可以在 EC2 中配置“让加密” @DigaoParceiro 你对第 5 步做了什么。复制的 DNS 名称?【参考方案3】:

一个老问题,但值得在答案中提及另一个选项。 如果您的域的 DNS 系统已在 Amazon Route 53 中定义,您可以在 EC2 前使用 Amazon CloudFront 服务并为其附加免费的 Amazon SSL 证书。这样一来,您将受益于 CDN 以加快内容交付速度,并使用 HTTPS 协议保护您的域。

【讨论】:

是否有任何参考或博客提到了实现这一目标的步骤? 在此视频中,atiqur rahman 使用亚马逊证书管理器获取 ssl 证书,然后他使用 EC2 实例配置云前端。配置 http/2 后自动启用。【参考方案4】:

对于想要在 ec2 上轻松使用 https 主要用于演示和测试目的的人来说,也必须有一个答案,他们可以非常快速地实现这一目标的一种方法是:

我的回答在这里描述了How you can achieve https for testing purposes in minutes with EC2 without the hassle of creating certificates

【讨论】:

【参考方案5】:

您也可以使用Amazon API Gateway。将您的应用程序放在 API Gateway 后面。请检查此FAQ

【讨论】:

【参考方案6】:

我发现的最佳资源之一是使用 let's encrypt,您的 EC2 实例不需要 ELB 或 cloudfront 即可拥有 HTTPS,只需按照以下简单说明进行操作: let's encrypt 登录到您的服务器并按照链接中的步骤操作。

正如其他人所说,通过编辑安全组打开端口 443 也很重要

您可以通过更改the site name in this link查看您的证书或任何其他网站的证书

请不要忘记它的有效期只有 90 天

【讨论】:

【参考方案7】:

首先,您需要打开 HTTPS 端口 (443)。为此,您转到https://console.aws.amazon.com/ec2/ 并单击左侧的Security Groups 链接,然后创建一个新的安全组,该安全组也可以使用HTTPS。 然后,只需更新正在运行的实例的安全组或使用该组创建一个新实例。

完成这些步骤后,您的 EC2 工作就完成了,这完全是一个应用程序问题。

【讨论】:

我能够将端口 443 的新规则添加到实例使用的安全组中,并且它刚刚开始工作,甚至没有重新启动它。 you can't change a security group of a running instance, even rebooting - 我认为自从发布此答案以来,此限制已被删除。 不用改安全组,Edit inbound rules @nikhil84 通过在安全组中添加 HTTPS,您只在机器上打开了端口 443,这是第 1 步。其次,您需要在该机器上设置服务器以侦听 443 端口(而不是默认的 HTTP端口 80)并接受 HTTPS 流量。您使用哪个服务器? @nikhil84 请遵循此处列出的指南:digitalocean.com/community/tutorials/… 在 Apache HTTPD 上设置 https【参考方案8】:

Amazon EC2 实例只是虚拟机,因此您可以像在任何服务器上设置 SSL 一样设置 SSL。

你没有提到你在哪个平台,所以很难提供更多信息。

【讨论】:

您好 - 我正在运行 T2.Micro Amazon Linux EC2 实例。我正在使用 node.js 来支撑服务器。我在我的服务器脚本中监听端口 443,并且我的安全组配置为端口 443。我还需要做什么才能启用 HTTPS?我需要一个证书,对吧?无法找到不基于 Elastic Beanstalk 的有关执行此操作的体面信息。 @SMT - 查看letsencrypt.org 以获得免费和自动更新证书。有很多关于如何使用节点设置它的信息(通过谷歌)。您无需执行任何其他特定于 AWS/EC2 的操作。 感谢您的回复!前几天我真的让它工作了,并简化了一些步骤。如果有人从未来读到这个:github.com/MSCHF/aws-ec2-node-npm-setup【参考方案9】:

使用Elastic Load Balacing,它支持在负载均衡器上终止SSL,包括从应用程序实例中卸载SSL解密并提供对SSL证书的集中管理。

【讨论】:

您不使用 ELB 来提供 SSL,这实际上是一个误导性的答案。无论如何,您的服务器都需要提供 SSL,因此如果您不需要,添加负载均衡器只是额外的成本。它也是软件中的 SSL 终止,因此负载平衡器和服务器之间的 SSL 是一个额外的步骤,会影响性能。 我同意你的评论。它会增加额外的成本并影响性能。我们不知道他们对服务器负载的确切要求,所以它仍然可能是一种方法。但是我不明白您的评论“您的服务器无论如何都需要提供SSL”,为什么需要这样做?负载平衡器还包括卸载 SSL。谢谢。 是的。您可以使用它以简单的方式提供 SSL。我只是认为这些实例仍然具有公共 DNS 值,用户可以出于任何原因直接访问它们。如果发生这种情况,很可能您也想强制它使用 SSL。 我知道这个评论晚了,但据我了解,如果你想使用注册域名,那么你必须使用 ELB,因为 EC2 IP 被认为是“非永久的”,因此不能使用您的 SSL 证书。另一方面,如果你只是使用亚马逊提供的DNS,那么它可能不需要ELB,我没有检查。

以上是关于Amazon EC2 中的 HTTPS 设置的主要内容,如果未能解决你的问题,请参考以下文章

设置 Amazon EC2 和 Amazon RDS

如何在 Amazon EC2 主机上设置 Django 网站?

如何为 Amazon EC2 实例设置 SSH 访问?

text 如何使用Apache,PHP,MySQL设置Amazon Web Services EC2实例

在 Amazon Ec2 上为 apache 用户设置路径变量

如何在 Amazon EC2 Ubuntu 服务器上设置 GUI