Elastic Beanstalk Flask 应用程序上的 HTTPS

Posted

技术标签:

【中文标题】Elastic Beanstalk Flask 应用程序上的 HTTPS【英文标题】:HTTPS on Elastic Beanstalk Flask application 【发布时间】:2015-10-07 19:23:12 【问题描述】:

到目前为止,我一直在尝试在我的 AWS Elastic Beanstalk(eb) 应用程序上启用 SSL,但运气不佳。

在关注documentation for configuring https access on eb 之后,我创建了一个自签名证书,我相信如果只想加密就足够了。

我创建了一个使用负载均衡器的 eb 环境,上传证书后,我可以使用它并选择安全监听端口 (8443)。

在 EC2 负载均衡器上,我为

创建了一个监听器
HTTPS   8443    HTTP    80  <cert file>

然后我给负载均衡器和 eb 实例一个具有规则的安全组:

Custom TCP Rule     TCP     8443     0.0.0.0/0

我还在 .ebextensions 中包含了一个配置,指向文档告诉我的:

Resources:
  sslSecurityGroupIngress:
    Type: AWS::EC2::SecurityGroupIngress
    Properties:
      GroupName: Ref : <security_group_name>
      IpProtocol: tcp
      ToPort: 8443
      FromPort: 8443
      CidrIp: 0.0.0.0/8443

然后在我的烧瓶应用程序中,应用程序具有以下参数:

from OpenSSL import SSL
from flask_sslify import SSLify

context = SSL.Context(SSL.TLSv1_2_METHOD)
context.use_privatekey_file('/home/ec2-user/privatekey.pem')
context.use_certificate_file('/home/ec2-user/server.crt')

basic_auth = BasicAuth(application)
sslify = SSLify(application)


if __name__ == '__main__':
    application.run(host='0.0.0.0', port=8443, ssl_context=context)

现在,当我转到以 https:// 为前缀的实例的公共 IP 时,我得到了这个:

Google Chrome Connection info(不能发布当前代表的图片哦)

这让我觉得我已经加密了,但 Flask 服务器连接日志仍然显示清晰的请求(预计会看到混乱的加密请求信息)。

当我连接到 *.elasticbeanstalk.com 地址时,我什么也得不到。

所以我想我有两个问题:

1) 这是否意味着我已加密?

2) 为什么我无法使用我的 elasticbeanstalk url 访问实例?

【问题讨论】:

【参考方案1】:

您的 ELB 配置是在端口 8443 上侦听 HTTPS 请求,并向 EC2 HTTP 端口发出代理请求。因此,您的 EC2 必须侦听 HTTP 端口。但是,这意味着您终止了 ELB 上的 SSL 请求。

如果您希望 EC2 在端口 8443 上侦听 HTTPS 请求,您的 ELB 配置应为:

HTTPS   8443    HTTPS   8443  <cert_file>

【讨论】:

以上是关于Elastic Beanstalk Flask 应用程序上的 HTTPS的主要内容,如果未能解决你的问题,请参考以下文章

使用 Elastic Beanstalk 设置 Flask 数据库迁移

在 Elastic BeanStalk 上部署 Flask 应用程序时遇到问题

Flask 应用程序 - 部署到 AWS Elastic Beanstalk 时出错

带有 SSL 的 Elastic Beanstalk 上的 Flask 提供 403 Forbidden

使用 Elastic Beanstalk 部署 Flask 应用程序时遇到问题

上传 Flask 应用程序时出现 AWS Elastic Beanstalk 错误