本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
在运行 Python 的 EC2 实例上终止 HTTPS
对于使用 Apache HTTP Server 和 Web Server Gateway Interface (WSGI) 的 Python 容器类型,您可使用配置文件来允许 Apache HTTP Server 使用 HTTPS。
将以下代码段添加到您的配置文件中,按照提示替换证书和私有密钥资料,并将该文件保存在源包的 .ebextensions
目录中。该配置文件执行以下任务:
-
packages
密钥使用 yum 安装mod24_ssl
。 -
files
密钥在实例上创建以下文件:/etc/httpd/conf.d/ssl.conf
-
配置 Apache 服务器。如果您的应用程序的名称不是
application.py
,请将WSGIScriptAlias
的值中突出显示的文本替换为您的应用程序的本地路径。例如,django 应用程序的路径可能是django/wsgi.py
。此位置应与您为环境设置的WSGIPath
选项值相符。根据您的应用程序的要求,您可能还需要向 python-path 参数添加其他目录。
/etc/pki/tls/certs/server.crt
-
在实例上创建证书文件。将
证书文件内容
替换为证书的内容。注意
YAML 依赖一致的缩进。当替换示例配置文件中的内容时,应匹配缩进级别,并且确保您的文本编辑器使用空格而不是字符来进行缩进。
如果您有中间证书,请将其放入
server.crt
中您的站点证书的后面:-----BEGIN CERTIFICATE-----
certificate file contents
-----END CERTIFICATE----------BEGIN CERTIFICATE-----
first intermediate certificate
-----END CERTIFICATE----- -----BEGIN CERTIFICATE-----second intermediate certificate
-----END CERTIFICATE----- /etc/pki/tls/certs/server.key
-
在实例上创建私有密钥文件。将
私有密钥内容
替换为用于创建证书请求或自签名证书的私有密钥的内容。
-
container_commands
密钥在一切配置完成后停止 httpd 服务,以便该服务使用新的https.conf
文件和证书。
注意
该示例仅可用于使用 Python 平台的环境。
例 .ebextensions/https-instance.config
packages:
yum:
mod24_ssl : []
files:
/etc/httpd/conf.d/ssl.conf:
mode: "000644"
owner: root
group: root
content: |
LoadModule wsgi_module modules/mod_wsgi.so
WSGIPythonHome /opt/python/run/baselinenv
WSGISocketPrefix run/wsgi
WSGIRestrictEmbedded On
Listen 443
<VirtualHost *:443>
SSLEngine on
SSLCertificateFile "/etc/pki/tls/certs/server.crt"
SSLCertificateKeyFile "/etc/pki/tls/certs/server.key"
Alias /static/ /opt/python/current/app/static/
<Directory /opt/python/current/app/static>
Order allow,deny
Allow from all
</Directory>
WSGIScriptAlias / /opt/python/current/app/application.py
<Directory /opt/python/current/app>
Require all granted
</Directory>
WSGIDaemonProcess wsgi-ssl processes=1 threads=15 display-name=%{GROUP} \
python-path=/opt/python/current/app \
python-home=/opt/python/run/venv \
home=/opt/python/current/app \
user=wsgi \
group=wsgi
WSGIProcessGroup wsgi-ssl
</VirtualHost>
/etc/pki/tls/certs/server.crt:
mode: "000400"
owner: root
group: root
content: |
-----BEGIN CERTIFICATE-----
certificate file contents
-----END CERTIFICATE-----
/etc/pki/tls/certs/server.key:
mode: "000400"
owner: root
group: root
content: |
-----BEGIN RSA PRIVATE KEY-----
private key contents
# See note below.
-----END RSA PRIVATE KEY-----
container_commands:
01killhttpd:
command: "killall httpd"
02waitforhttpddeath:
command: "sleep 3"
注意
避免将包含私有密钥的配置文件提交到源控件。在测试完配置并确认其有效后,请在 Amazon S3 中存储私有密钥并修改配置以在部署期间下载该密钥。有关说明,请参阅 在 Amazon S3 中安全地存储私有密钥。
在单实例环境中,您还必须修改实例的安全组,以便允许端口 443 上的流量。以下配置文件使用 AWS CloudFormation 函数检索安全组的 ID,并向其中添加规则。
例 .ebextensions/https-instance-single.config
Resources:
sslSecurityGroupIngress:
Type: AWS::EC2::SecurityGroupIngress
Properties:
GroupId: {"Fn::GetAtt" : ["AWSEBSecurityGroup", "GroupId"]}
IpProtocol: tcp
ToPort: 443
FromPort: 443
CidrIp: 0.0.0.0/0
对于负载均衡环境,将负载均衡器配置为保持不变地传输安全流量,或者解密后重新加密,以便实现端到端加密。