繁体   English   中英

Elastic Beanstalk Flask应用程序上的HTTPS

[英]HTTPS on Elastic Beanstalk Flask application

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

遵循在eb上配置https访问文档之后,我创建了一个自签名证书,我相信如果一个人只想加密就足够了。

我创建了一个使用负载平衡器的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

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

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浏览器的连接信息 (无法发布具有当前代表的图片)

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

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

所以我想我有两个问题:

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

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

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

如果要让EC2在端口8443上侦听HTTPS请求,则ELB配置应为:

HTTPS   8443    HTTPS   8443  <cert_file>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM