【发布时间】:2014-10-17 01:48:25
【问题描述】:
这是应用程序目录结构。
- app/__init_.py
- 应用/静态/
- 应用/模型/
- 应用程序/视图/
- application.py
- requirements.txt
- .elasticbeanstalk/config
- .elasticbeanstalk/optionsettings.application_name
- .ebextensions/python.config
- .ebextensions/https.config
这是 .elasticbeanstalk 中文件的 sn-ps
#config
EnvironmentTier=WebServer::Standard::1.0
EnvironmentType=SingleInstance
Region=us-west-1
ServiceEndpoint=https://elasticbeanstalk.us-west-1.amazonaws.com
SolutionStack=64bit Amazon Linux 2014.03 v1.0.3 running Python
#optionsettings.application_name
[aws:elasticbeanstalk:container:python]
NumProcesses=1
NumThreads=15
StaticFiles=/static/=app/static/
WSGIPath=application.py
[aws:elasticbeanstalk:container:python:staticfiles]
/static/=app/static/
这是我从 CheapSSL 创建 SSL 证书所采取的步骤
- openssl genrsa 2048 > privatekey.pem
- openssl req -new -key privatekey.pem -out csr.pem
- 向 Comodo 提出 SSL 证书请求并收到三个文件
- 根 CA 证书 - AddTrustExternalCARoot.crt
- 中间 CA 证书 - PositiveSSLCA2.crt
- 您的 PositiveSSL 证书 - server.crt
注意:我将服务器指定为 Apache/OpenSSL
最后,这里是 .ebextensions 中文件的 sn-ps
#https.config
Resources:
sslSecurityGroupIngress:
Type: AWS::EC2::SecurityGroupIngress
Properties:
GroupName: {Ref : AWSEBSecurityGroup}
IpProtocol: tcp
ToPort: 443
FromPort: 443
CidrIp: 0.0.0.0/0
packages:
yum:
mod24_ssl : []
files:
/etc/httpd/conf.d/ssl.conf:
mode: 000777
owner: ec2-user
group: ec2-user
content: |
LoadModule ssl_module modules/mod_ssl.so
Listen 443
<VirtualHost *:443>
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
SSLEngine on
SSLCertificateFile "/etc/pki/tls/certs/server.crt"
SSLCertificateKeyFile "/etc/pki/tls/certs/server.key"
Alias /static /opt/python/current/app/
<Directory /opt/python/current/app/>
Order allow,deny
Allow from all
</Directory>
WSGIScriptAlias / /opt/python/current/app/python/application.py
<Directory /opt/python/current/app/>
Order allow,deny
Allow from all
</Directory>
WSGIDaemonProcess wsgi-ssl processes=1 threads=15 display-name=%{GROUP} \
python-path=/opt/python/current/app:/opt/python/run/venv/lib/python2.6/site-packages user=wsgi group=wsgi \
home=/opt/python/current/app
WSGIProcessGroup wsgi
</VirtualHost>
/etc/pki/tls/certs/server.crt:
mode: 000777
owner: ec2-user
group: ec2-user
content: |
-----BEGIN CERTIFICATE-----
#contents from server.crt
-----END CERTIFICATE-----
/etc/pki/tls/certs/server.key:
mode: 000777
owner: ec2-user
group: ec2-user
content: |
-----BEGIN RSA PRIVATE KEY-----
#contents from privatekey.pem
-----END RSA PRIVATE KEY-----
此配置是 AWS Elastic Beanstalk 文档中的一个 sn-p,有少量更改。 http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/SSLPython.SingleInstance.html
- mod_ssl -> mod24_ssl 由于 yum 安装错误。我很幸运能从 Github 找到这个修复程序
- 01killhttpd 已排除。在多次部署应用程序后,杀死 httpd 对应用程序造成永久性损坏。
症状如下。
- 可以访问http:
- Gives 403 Forbidden 您无权访问此服务器上的 /。对于 https:
如有必要,我会公开网站地址。
我已采取 AWS 文档中指定的每一步,但仍未能实现单一目标;用 https 连接我的网站。网上没有足够的帖子来帮助我解决这个问题。我远离负载均衡器,因为我使用 GoDaddy 购买了域,并且为 lb 设置域太复杂了(这是另一回事)。
这是指向 Elastic Beanstalk 日志快照的链接。
https://dl.dropboxusercontent.com/u/23288606/Log.txt
提前致谢。
更新:
有人阅读了日志并指出了一条错误消息。
[ssl:warn] [pid 1989] AH01909: [ec2-address].compute.amazonaws.com:443:0 server certificate does NOT include an ID which matches the server name
是的,SSL 证书是指我的自定义域,而服务器仍然认为它是 ec2 的默认公共 DNS(我认为)。
仅供参考,自定义域是从 Godaddy 购买的。我这样做是为了让 A Record 指向我的 ec2 ip 地址。
简而言之,我该如何做到这一点,以便当我的 ec2 服务器设置 ssl 时,它知道它的 fqdn 是我的自定义域,而不是 ec2 提供的域?
【问题讨论】:
标签: ssl amazon-web-services amazon-ec2 flask amazon-elastic-beanstalk