HTTPS Elastic Beanstalk非自定义域

时间:2018-08-02 11:24:03

标签: amazon-web-services ssl https elastic-beanstalk load-balancing

我将Django应用程序部署在Elastic Beanstalk上。它给了我这样的网址

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

是否有一种简单的方法可以使用 HTTPS 拥有相同的URL,而无需购买证书?

3 个答案:

答案 0 :(得分:2)

  

“有一种简单的方法来拥有相同的URL”

简单答案:否。

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

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

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

答案 1 :(得分:2)

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

在应用程序的初始测试和验证阶段,通常是执行以下过程的时间。为确保可行性,而不必为最终域名购买证书。您有一个应用程序,想查看它是否可以在Elastic Beanstalk上安全地部署。亚马逊从accepted answers linked document推荐它:

  

对于开发和测试,您可以使用开源工具自己创建并签署证书。自签名证书是免费且易于创建的,但不能用于公共站点上的前端解密。如果尝试将自签名证书用于与客户端的HTTPS连接,则用户的浏览器会显示一条错误消息,指示您的网站不安全。但是,您可以使用自签名证书来保护后端连接而不会出现问题。

我在下面显示的概念证明使用默认的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。只需按照步骤操作,直到“更新您的应用程序”即可。记下并保存运行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步中上传到证书管理器的证书。

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

enter image description here

单击证书将显示详细信息:

enter image description here

希望这可以帮助您在AWS上验证Django应用程序的方式。请不要为您的实时(又称生产)环境运行自签名证书。

答案 2 :(得分:-3)

您将需要证书。您可以上载自己的证书,也可以简单地使用AWS ACM,其中证书是免费的(https://docs.aws.amazon.com/acm/latest/userguide/acm-billing.html)。

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

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