到目前为止,我一直在尝试在我的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网址访问该实例?
答案 0 :(得分:0)
您的ELB配置是在端口8443上侦听HTTPS请求,并向EC2 HTTP端口发出代理请求。因此,您的EC2必须侦听HTTP端口。但是,这意味着您在ELB上终止了您的SSL请求。
如果您希望EC2在端口8443上侦听HTTPS请求,则您的ELB配置应为:
HTTPS 8443 HTTPS 8443 <cert_file>