Elastic Beanstalk Flask应用程序上的HTTPS

时间:2015-07-18 00:21:29

标签: python ssl encryption flask elastic-beanstalk

到目前为止,我一直在尝试在我的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网址访问该实例?

1 个答案:

答案 0 :(得分:0)

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

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

HTTPS   8443    HTTPS   8443  <cert_file>