在没有专用IP地址的EC2服务器上安装SSL证书

7
场景: 我有一台EC2服务器,用于托管API,目前正在设置为接受来自多台iPad的连接。我不希望网络嗅探器看到服务器和设备之间交换的JSON请求。我的想法是建立一个安全协议,以确保通信安全。

我被告知购买SSL证书是正确的方法。我运行的Amazon服务器实例具有以下格式的地址:

ec2-xx-xxx-xx-xxx.ap-southeast-1.compute.amazonaws.com/

这是我的网站根目录,包含了所有与Web服务相关的文件。我的Web服务URL看起来类似于:

ec2-xx-xxx-xx-xxx.ap-southeast-1.compute.amazonaws.com/Agent/Create

等等,这种情况下完全没有托管计划(如果需要信息的话)。 我被推荐从http://www.Godaddy.com购买SSL证书,并考虑获得最多可容纳5个域名的SSL证书套餐。

问题1: 为了确保不出现任何故障,我需要注意哪些事项? 我最近读到,我可能需要将弹性IP地址与我的实例关联起来,否则我的实例的IP地址将在重新启动时更改?如果是这样的话,那么这意味着用于此的SSL证书:ec2-xx-xxx-xx-xxx.ap-southeast-1.compute.amazonaws.com域将不再工作,因为IP地址会在重新启动后更改,因此我失去了安全域?

问题2: 如果我的问题1中的想法是正确的,那么我的问题将是对于初学者来说创建服务器实例的专用URL的最用户友好的方式是什么(以便1)域名在服务器重新启动时不会随机更改(我也不知道我何时会重启),2)这是否意味着我可以有更容易记住的Web服务URL,例如.... www.pk.com/Agent/Create而不是长长的ec2丑陋的URL?

任何易于跟随的教程都将非常有帮助。我已经看过一些关于弹性IP地址、SSL证书和其他关于重命名ec2 URL的文章,但我不知道哪个适用于我。 希望有人可以帮忙。谢谢

2个回答

12
你需要做的是获取一个弹性 IP 地址。这样,当你启动实例时,就可以将其绑定到一个特定的 IP 地址上。然后,你可以在 DNS 中注册一个主机名(Amazon 不提供此部分帮助),并声明该主机名具有你已注册的弹性 IP 地址。
最后一步是获取一个服务器证书(严格来说,是公共部分为服务器证书的密钥对),该证书在其 Distinguished Name 的 CN 字段中具有主机名,并将该服务器密钥对安装在实例上。(这是 Amazon 无法帮助你完成的另一部分,并且实际上与你自己托管硬件时的过程相同)。这样,客户端:
  1. 查找主机名并获取弹性 IP 地址,
  2. 连接并获取服务器证书,并
  3. 检查服务器证书,看到它所用于的主机名是他们预期的主机名。(还有几个其他检查,例如证书是否由受信任的证书颁发机构签署以及证书是否在有效期内。)
这允许客户相信他们已经安全连接到的人是他们预期的安全连接对象,这是建立信任的关键部分。
不应该在申请证书时使用AWS机器名称(内部或外部)。这些名称会更改,您真的不想信任其他人的虚拟机。

当你说“你真的不想信任别人的虚拟机”时,你是指IP地址可能随时更改,因此建议获取弹性IP地址吗?一旦我将我的实例绑定到特定的IP地址,那么我是否能够像这样访问php: www.examplepk.com/phpmyadmin,而不是那个来自ec2.com的冗长URL? - Pavan
  1. 我猜一旦实例与特定的IP地址相关联/绑定,我可以随意重启服务器多次,这将消除每次服务器启动时IP地址更改的问题?我甚至不敢重新启动我的服务器,但是我说的对吗?我的IP地址可能会发生变化,这意味着我已经创建的EC2地址的书签可能由于同一默认丑陋IP地址的更改而无法使用另一个丑陋的IP地址?
- Pavan
@Pavan 我的意思是其他人无法在该弹性IP地址上启动虚拟机;它是您运行任何虚拟机的固定IP地址。您可以随意重启,因为您将保留该地址(只要使用正确的引导配置)。据我上次检查,只有在没有系统使用弹性IP地址时才需要支付费用。 - Donal Fellows
我记不清你是否也有一个标准的外部地址;如果是这样,安排管理活动通过该地址而不是公共服务地址是非常好的。不过这是一个更为复杂的处理模型;首先要解决SSL配置问题。(就我个人而言,我会使用SSH通过终端登录系统来进行所有的管理操作,因为我可以将其锁定得比任何Web应用程序都更加严格。但这可能因人而异。) - Donal Fellows

8
Donal的回答是正确的。您需要明确注册一个域名,并生成包含该域名作为CN的SSL证书。弹性IP地址在此问题中绝对是您的朋友。您将需要它们。
我添加了另一个答案,以便提供另一个观点:如果您想要扩展后端解决方案,那么这种方式将更加困难。如果您曾经考虑过添加更多服务器来托管您的Web服务,那么您应该绝对设置Elastic Load Balancer,将实例添加到其中,并将刚刚注册的域名指向您的弹性负载均衡器。然后,您可以购买SSL证书并直接安装在ELB上,在ELB上配置SSL终止。您还将配置ELB,使到达443端口的连接映射到服务器上的80端口(或任何端口)。别担心,这很容易设置。
每当您想要向Web服务添加更多服务器时,只需设置另一个EC2实例(此过程可以自动化),并将其添加到ELB即可。
通过这种设置,您可以摆脱弹性IP地址的需求。所有连接都通过ELB进行。

谢谢您的帖子。您能告诉我需要增加更多服务器的情况吗? - Pavan
  1. 当您的服务负载增长到服务器容量的边缘或超出时。
  2. 如果您想要添加冗余,从而提高可用性。
第二点绝对是最佳实践。当您的服务增长时,第一点可能会出现问题。
- Viccari

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