亚马逊 EC2 + SSL

27

我想在EC2实例上启用SSL。我知道如何安装第三方SSL证书。我也已经在安全组中启用了SSL。

我只想使用像这样的网址:ec2-xx-xxx-xxx-xx.compute-1.amazonaws.com,并且支持https。

我找不到任何相关步骤。

如果有人能指导我一些文档或其他内容,那就太好了。


编辑:

我在EC2上有一个实例,在该实例上我已经安装了LAMP。我也在安全组策略中启用了HTTP、HTTPS和SSH。

当我在浏览器中打开公共DNS URL时,可以看到Web服务器完美运行。但是,当我在URL中添加https时,没有任何反应。

我有什么遗漏吗?我真的不想在此实例上使用任何自定义域名,因为我将在一个月后终止它。


你的确切问题是什么?你是在寻求SSL教程吗?如果是的话,请参考http://www.sslshopper.com/。 - slayedbylucifer
1
不,我想知道是否有默认的amazonaws.com通配符可以安装在我的EC2实例上?我不想在我的EC2实例上使用任何域名。我想使用默认的公共DNS名称,并带有SSL的EC2实例。 - Neeraj Kumar
亚马逊现在提供SSL证书。https://us-west-1.console.aws.amazon.com/acm/home - Danny Robinson
4个回答

12

对于开发、演示、内部测试(这对我来说是常见情况),您可以使用隧道工具在 ec2 中实现演示级别的 https。通过 [ngrok],尤其是为了内部测试目的,在几分钟之内您便可以获得 https(演示级别的流量通过隧道传输)

工具1:https://ngrok.com 步骤:

  1. 将 ngrok 下载到您的 EC2 实例: wget https://bin.equinox.io/c/4VmDzA7iaHb/ngrok-stable-linux-amd64.zip (在撰写本文时是这个链接,但一旦您登录 ngrok 主页,您将看到这个链接)。
  2. 在 AWS 安全组中启用 8080、4443、443、22、80 端口。
  3. 注册并登录到 ngrok,并复制激活它所需的带有令牌的命令: ./ngrok authtoken shjfkjsfkjshdfs (一旦您登录,您将在他们的主页上看到它)
  4. 在您的 http - 非 https 服务器上运行(任何,nodejs,python,不论哪个)EC2
  5. 运行 ngrok:./ngrok http 80 (如果您的简单 http 服务器运行在不同的服务器上,则可以使用其他端口)
  6. 您将获得指向您服务器的 https 链接。

工具2:cloudflare wrap

或者,我认为您可以使用 ngrok 的另一种替代品,它称为 Cloudflare wrap,但我没有尝试过。

工具3:localtunnel

第三种选择可以是 https://localtunnel.github.io,与ngrok不同的是它可以免费提供子域名,虽然不是永久的,但你可以请求一个特定的子域名而不是随机字符串。

--subdomain 在localtunnel服务器上请求命名子域名(默认为随机字符)

工具4: https://serveo.net/


很棒的答案。正是我需要用来测试的。 - d512

11

事实证明,Amazon EC2实例默认情况下不提供ssl证书。 我跳过了它们是虚拟服务器提供商的部分。

即使是基本的SSL证书,您也需要从某人那里购买并在服务器上手动安装它。

我使用的是startssl.com。 他们提供免费的基本ssl证书。


3
“基本证书”和“非基本证书”有什么区别?我很难理解为什么价格差距如此之大,从每年5美元到250美元不等。 - OutputLogic
1
你知道基本和非基本套餐之间的区别吗?我也在寻找一个浏览器不会抱怨的SSL证书。我发现有一个名为“Let's Encrypt”的项目将免费提供这样的证书,但要到十月份才能推出... - Mahshid Zeinaly
请问您能否详细说明一下您如何通过StartSSL的流程?据我所知,您需要通过他们验证顶级域名,但由于EC2地址属于亚马逊,因此您无法进行验证。 - Cenobyte321
1
@Nab 我购买了一个域名,并为该域名创建了证书。然后我使用CNAME记录将其映射到EC2公共DNS记录上。 - Neeraj Kumar

7
  1. 使用openssl创建自签名SSL证书。查看此链接以获取更多信息。
  2. 将该证书安装在您的Web服务器上。由于您提到了LAMP,我猜测是Apache。因此,请查看此链接以将SSL安装到Apache。

如果您重新启动实例,则会获得不同的公共DNS,请注意此事项。或者,将弹性IP地址附加到您的实例。

但是,当我将https添加到URL中时,什么也没有发生。

正确,您的Web服务器需要安装SSL证书和私钥才能提供https流量。一旦完成,您就可以开始使用了。此外,如果您使用自签名证书,则您的Web浏览器将会显示关于未受信任证书的警告。您可以忽略该警告并继续访问Web页面。


4
谢谢。这个方法可行。但是,AWS没有他们自己的通配符SSL证书吗?我可以安装吗?安装自签名证书会在浏览器上产生警告。我不想要那样。因为我将在Facebook应用中使用它们。而且他们需要SSL。我也不想购买一个域名。 - Neeraj Kumar
2
我不知道AWS有这样的证书。请尝试在AWS论坛上发布您的问题,您可能会从AWS人员那里获得更好的见解。 - slayedbylucifer
@NeerajKumar AWS确实有他们的SSL。这里有一个指南。 - mobby

1
您可以使用Caddy和nip.io的组合在没有自定义域的情况下启用EC2实例上的SSL。 nip.io允许您将任何IP地址映射到主机名,无需编辑主机文件或在DNS管理中创建规则。 Caddy是一个功能强大的开源Web服务器,具有自动HTTPS功能。
  1. Install Caddy on your server

  2. Create a Caddyfile and add your config (this config will forward all requests to port 8000)

    <EC2 Public IP>.nip.io {
        reverse_proxy localhost:8000
    }
    

    enter image description here

  3. Start Caddy using the command caddy start

现在您应该能够通过 https://<IP>.nip.io 访问您的服务器。

enter image description here

我在这里撰写了一篇深入的文章,讲述如何进行设置:在没有自定义域名的情况下配置AWS EC2上的HTTPS

我有同样的需求,但我在我的EC2实例上运行Tomcat服务器。那么,假设我安装Caddy服务器,您确定我的Tomcat服务器能够为我的客户端提供HTTPS请求服务吗? - Sumit Kandoi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接