我将Django应用程序部署在Elastic Beanstalk上。它给了我这样的网址
http://<my-environment>.us-west-2.elasticbeanstalk.com
是否有一种简单的方法可以使用 HTTPS 拥有相同的URL,而无需购买证书?
答案 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。 (请注意:自签名证书也可以用于保护负载均衡器与实例之间的流量,但我的答案没有涵盖此主题)
请按照以下步骤操作:
使用命令行界面(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步中需要使用该名称。
在开发计算机上安装OpenSSL。然后,按照以下步骤使用openSSL创建自签名证书:https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/configuring-https-ssl.html。您无需执行此页面上的最后一步。下一步需要server.crt
和privatekey.cer
文件的内容。在此答案的最底部是我用于证书的假值。除了域名,这些都无所谓。
在您的AWS控制台中转到Certification Manager。有一个蓝色的大按钮,Import Certficiate。点击这个。使用您喜欢的文本编辑器打开server.crt
文件,然后将内容粘贴到顶部带有标签的框:证书正文。然后使用您喜欢的文本编辑器打开privatekey.cer
文件,并将内容粘贴到带有标签的第二个框中:证书私钥。单击查看并导入,并确保一切正常。
最后一步是打开HTTPS并在负载均衡器上终止它。请遵循此亚马逊指南中的步骤:https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/configuring-https-elb.html。请注意,在本指南的第5步中,您将要遵循 Classic Load Balancer 的步骤。选择在此答案的第3步中上传到证书管理器的证书。
申请后-您的网站将运行带有自签名证书的HTTPS。请参阅下面的概念证明网站,它只是默认的Django应用程序:
单击证书将显示详细信息:
希望这可以帮助您在AWS上验证Django应用程序的方式。请不要为您的实时(又称生产)环境运行自签名证书。
答案 2 :(得分:-3)
您将需要证书。您可以上载自己的证书,也可以简单地使用AWS ACM,其中证书是免费的(https://docs.aws.amazon.com/acm/latest/userguide/acm-billing.html)。
使用.ebextensions
资源将配置文件添加到LoadBalancer
目录,并通过(1)中的证书将SSLCertificateId
设置为ARN:
Resources:
AWSEBLoadBalancer:
Type: "AWS::ElasticLoadBalancing::LoadBalancer"
Properties:
Listeners: [{
"LoadBalancerPort": "443",
"SSLCertificateId": "$CERT_ARN",
"Protocol": "HTTPS" }]