本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
在运行 Ruby 的 EC2 实例上终止 HTTPS
对于 Ruby 容器类型,启用 HTTPS 的方式取决于所用应用程序服务器的类型。
为使用 Puma 的 Ruby 配置 HTTPS
对于使用 Puma 作为应用程序服务器的 Ruby 容器类型,您可使用配置文件启用 HTTPS。
将以下代码段添加到您的配置文件中,按照提示替换证书和私有密钥资料,并将该文件保存在源包的 .ebextensions
目录中。该配置文件执行以下任务:
-
files
密钥在实例上创建以下文件:/etc/nginx/conf.d/https.conf
-
配置 nginx 服务器。nginx 服务启动时加载此文件。
/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
密钥在一切配置完成后重启 nginx 服务器,以便让该服务器使用新的https.conf
文件。
例 .ebextensions/https-instance.config
files:
/etc/nginx/conf.d/https.conf:
content: |
# HTTPS server
server {
listen 443;
server_name localhost;
ssl on;
ssl_certificate /etc/pki/tls/certs/server.crt;
ssl_certificate_key /etc/pki/tls/certs/server.key;
ssl_session_timeout 5m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
location / {
proxy_pass http://my_app;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto https;
}
location /assets {
alias /var/app/current/public/assets;
gzip_static on;
gzip on;
expires max;
add_header Cache-Control public;
}
location /public {
alias /var/app/current/public;
gzip_static on;
gzip on;
expires max;
add_header Cache-Control public;
}
}
/etc/pki/tls/certs/server.crt:
content: |
-----BEGIN CERTIFICATE-----
certificate file contents
-----END CERTIFICATE-----
/etc/pki/tls/certs/server.key:
content: |
-----BEGIN RSA PRIVATE KEY-----
private key contents
# See note below.
-----END RSA PRIVATE KEY-----
container_commands:
01restart_nginx:
command: "service nginx restart"
注意
避免将包含私有密钥的配置文件提交到源控件。在测试完配置并确认其有效后,请在 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
对于负载均衡环境,将负载均衡器配置为保持不变地传输安全流量,或者解密后重新加密,以便实现端到端加密。
为使用 Passenger 的 Ruby 配置 HTTPS
对于使用 Passenger 作为应用程序服务器的 Ruby 容器类型,您可同时使用配置文件和 JSON 文件启用 HTTPS。
为使用 Passenger 的 Ruby 配置 HTTPS
-
将以下代码段添加到您的配置文件中,按照提示替换证书和私有密钥资料,并将该文件保存在源包的
.ebextensions
目录中。该配置文件执行以下任务:-
files
密钥在实例上创建以下文件:/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
-
在实例上创建私有密钥文件。将
私有密钥内容
替换为用于创建证书请求或自签名证书的私有密钥的内容。
例 用于为使用 Passenger 的 Ruby 配置 HTTPS 的 .Ebextensions 代码段
files: /etc/pki/tls/certs/server.crt: content: | -----BEGIN CERTIFICATE-----
certificate file contents
-----END CERTIFICATE----- /etc/pki/tls/certs/server.key: content: | -----BEGIN RSA PRIVATE KEY-----private key contents
# See note below. -----END RSA PRIVATE KEY-----注意
避免将包含私有密钥的配置文件提交到源控件。在测试完配置并确认其有效后,请在 Amazon S3 中存储私有密钥并修改配置以在部署期间下载该密钥。有关说明,请参阅 在 Amazon S3 中安全地存储私有密钥。
-
-
创建一个文本文件并将以下 JSON 添加到该文件。将该文件保存在源包的名为
passenger-standalone.json
的根目录中。此 JSON 文件将 Passenger 配置为使用 HTTPS。重要
此 JSON 文件不得包含字节顺序标记 (BOM)。如果此文件包含字节顺序标记,则 Passenger JSON 库将不会正确读取此文件,并且 Passenger 服务将不会启动。
例 passenger-standalone.json
{ "ssl" : true, "ssl_port" : 443, "ssl_certificate" : "/etc/pki/tls/certs/server.crt", "ssl_certificate_key" : "/etc/pki/tls/certs/server.key" }
在单实例环境中,您还必须修改实例的安全组,以便允许端口 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
对于负载均衡环境,将负载均衡器配置为保持不变地传输安全流量,或者解密后重新加密,以便实现端到端加密。