为啥 Https 在 EC2 上不起作用?

Posted

技术标签:

【中文标题】为啥 Https 在 EC2 上不起作用?【英文标题】:Why Https doesn't work on EC2?为什么 Https 在 EC2 上不起作用? 【发布时间】:2014-09-18 08:56:29 【问题描述】:

我有一个正在运行的 Elastic Beanstalk 实例在一个安全组上运行,该安全组具有入站授权的 http 和 https。但是 https 似乎不起作用...为什么?

第二个问题: 我目前正在为我的域名创建一个 ssl 证书。我应该将它上传到 AWS 的哪个位置?

谢谢

【问题讨论】:

你看this了吗? @Idris 是的,根据评论,这应该在更新安全组时即时工作。此外,亚马逊不要让我在创建新实例时选择安全组。:/ 我现在正在浏览文档。你看到this了吗?我只是进行基本诊断。 谢谢@Idris,但即使我使用良好的安全组启动一个新实例,它似乎也无法正常工作.. 【参考方案1】:

您可以为您的 Elastic Beanstalk 环境配置 HTTPS。 请阅读以下文件: http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/configuring-https.html

您可以使用您喜欢的控制台或 CLI 将您的 SSL 证书上传到 AWS IAM。 您无需直接修改 EC2 实例的安全组。

有关上述文档第 3 步的更多详细信息:

在应用源内名为 .ebextensions 的文件夹中创建一个名为 01-ssl.config 的文件。 将以下内容放入此文件中。

option_settings:
    - namespace: aws:elb:loadbalancer
      option_name: LoadBalancerHTTPSPort
      value: 443
    - namespace: aws:elb:loadbalancer
      option_name: SSLCertificateId
      value: <arn of your ssl certificate>

这些选项设置应自动修改您的安全组入口规则以适当地允许流量。

您可以阅读有关使用 ebextensions here 自定义 Elastic Beanstalk 环境的更多信息。

有关支持的所有选项设置(包括 ELB 设置)的详细信息,请参阅here。 如果您遇到任何问题,请告诉我。

更新

默认情况下,当您创建 Elastic Beanstalk 环境时,它会创建一个 EC2 实例并将其置于 Elastic Load Balancer 后面。如果您不需要负载均衡器,则可以按照here 的说明创建单实例环境,或者您是否已经拥有单实例环境。 拥有单实例环境后,您可以按照here 的说明为您的环境配置 SSL。

关于如何不将证书放入配置文件的更新

由于您不想将 server.crt 文件放在您的 ebextensions 配置文件中,您可以将文件上传到 S3,然后让 Elastic Beanstalk 将该文件直接下载到您的 EC2 实例。在示例 here 中唯一改变的是您使用了 source 而不是 content 来指定文件的内容。在源部分中,您可以放置​​要下载文件的 URL。

您的 ebextensions 将如下所示:

files:
    /etc/pki/tls/certs/server.crt:
        mode: "000777"
        owner: ec2-user
        group: ec2-user
        source: <URL>

这样您就不需要将内容放入存储库中。阅读有关文件指令here 的更多信息。

如果您遇到问题,请仔细检查您的 IAM 实例配置文件(用于运行 beanstalk 环境的配置文件)是否可以访问您的 S3 对象。 如果您需要有关 IAM 实例角色和 Elastic Beanstalk 的更多详细信息,请阅读 this 和 this。

【讨论】:

谢谢@Rohit,但我只是不明白为什么帖子在谈论负载均衡器?我暂时没有任何负载平衡需求。你能解释一下吗? 非常感谢!但是,在示例中,aws 创建了一个 .config 文件,其中直接包含证书的内容。但我不希望它出现在我的回购中?不是吗?如何进行? 完美!最后一个问题:我是否必须在我的 nodejs 应用程序中监听端口 80 和 443?并给 expressjs 我的证书? 对于单实例环境,是的,实例端口将为 443。对于您的第二个问题,这是否有帮助:***.com/questions/11804202/…? 像魅力一样工作!谢谢你,Rohit,你是老板 :)

以上是关于为啥 Https 在 EC2 上不起作用?的主要内容,如果未能解决你的问题,请参考以下文章

为啥“console.log()”在这个网站上不起作用?

为啥这个 Selenium 的拖放 C# 代码在 Chrome 上不起作用?

PHP 函数 mail() 在 AWS EC2 服务器上不起作用

为啥 onload 事件在使用 window.open 打开的选项卡上不起作用?

为啥这个 $.post() 在 iOS 上不起作用?

为啥 LESS css 在 localhost 上不起作用