HTTPS Elastic Beanstalk 非自定义域

HTTPS Elastic Beanstalk non custom domain

我在 Elastic Beanstalk 上部署了我的 Django 应用程序。它给我一个 URL 这样的

http://<my-environment>.us-west-2.elasticbeanstalk.com 

有没有一种简单的方法可以让 URL 使用 HTTPS 而无需购买证书?

您将需要一个证书。您可以上传自己的证书或直接使用证书免费的 AWS ACM (https://docs.aws.amazon.com/acm/latest/userguide/acm-billing.html)。

  1. 从 AWS ACM 请求证书
  2. 使用 LoadBalancer 资源将配置文件添加到 .ebextensions 目录,并将 SSLCertificateId 设置为 (1) 中证书中的 ARN:

    Resources:
    AWSEBLoadBalancer:
        Type: "AWS::ElasticLoadBalancing::LoadBalancer"
    Properties:
        Listeners: [{
            "LoadBalancerPort": "443",
            "SSLCertificateId": "$CERT_ARN",
            "Protocol": "HTTPS" }]
    

"Is there a simple way to have the same URL"

简单的回答:没有。

由于您不拥有域名 elasticbeanstalk.com,因此您无法分配有效的 SSL 证书。即使您自己创建一个自签名证书,它也是不受信任的,浏览器会显示错误。

您只能为您拥有 "control" 的域提供有效的 SSL 证书。即证明您的所有权。因此,要使有效的 HTTPS 正常工作并拥有有效的证书,您需要注册一个域名。

来源: https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/configuring-https.html

我不同意已接受的答案:是的,有亚马逊批准的方法可以使用 Elastic Beanstalk 提供的默认域加载证书(免费的自签名证书)。我刚刚使用最新的默认 Django 应用程序作为概念证明(Django ver 2.1 和 Python ver 3.6)完成了这项任务。我的部署是在 Windows 10 台机器上完成的,机器上装有最新的 AWS cli。

在应用程序的初始测试和验证阶段,您通常会执行这样的过程。确保可行性而无需为您的最终域购买证书。您有一个应用程序,想看看它是否会在 Elastic Beanstalk 上安全部署。亚马逊推荐它来自 accepted answers linked document:

For development and testing, you can create and sign a certificate yourself with open source tools. Self-signed certificates are free and easy to create, but cannot be used for front-end decryption on public sites. If you attempt to use a self-signed certificate for an HTTPS connection to a client, the user's browser displays an error message indicating that your web site is unsafe. You can, however, use a self-signed certificate to secure backend connections without issue.

我在下面展示的概念证明使用默认的 Elastic Beanstalk Python 3.6 环境,它在负载均衡器处终止 HTTPS。 (注意:自签名证书也可用于保护负载均衡器和实例之间的流量,但我的回答不涉及此主题)

按照以下步骤操作:

  1. 使用命令行界面 (EB CLI) 将您的 Django 应用程序安装到 Elastic Beanstalk 中。我遵循以下指南中的步骤:https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/create-deploy-python-django.html。在撰写本文时,我抓取的 Django 版本是 2.1,我为 EB 选择的 Python 版本是 3.6。只需按照 "Updating Your Application" 之前的步骤操作即可。记下并保存在您 运行 eb status 之后返回的 CNAME(EB 域名),因为您将在我的第 2 步中需要它。

  2. 在您的开发机器上安装 OpenSSL。然后按照以下步骤使用 openSSL 创建自签名证书: https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/configuring-https-ssl.html 。您无需执行此页面上的最后一步。下一步需要 server.crtprivatekey.cer 文件的内容。在这个答案的最底部是我用于证书的假值。这些都无所谓,除了域名。

  3. 转到 AWS 控制台中的 Certification Manager。有一个蓝色的大按钮,Import Certficiate。单击此。使用您喜欢的文本编辑器打开 server.crt 文件,并将内容粘贴到带有标签的顶部框中:证书正文。然后使用您喜欢的文本编辑器打开 privatekey.cer 文件,并将内容粘贴到第二个带有标签的框中:证书私钥。单击检查和导入并确保一切正常。

  4. 最后一步是打开 HTTPS 并在您的负载均衡器上终止它。按照此亚马逊指南中的步骤操作:https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/configuring-https-elb.html。请注意,在本指南的第 5 步中,您需要遵循 Classic Load Balancer 的步骤。选择您在此答案的第 3 步中上传到证书管理器的证书。

申请后 - 您的网站将 运行ning 带有自签名证书的 HTTPS。请参阅下面我的概念验证网站,它只是默认的 Django 应用程序:

点击证书显示详细信息:

希望这对您在 AWS 上验证 Django 应用程序有所帮​​助。请不要 运行 为您的实时(又名生产)环境使用自签名证书。