在运行 .NET Core on Linux 的 Amazon EC2 实例上终止 HTTPS - Amazon Elastic Beanstalk
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

在运行 .NET Core on Linux 的 Amazon EC2 实例上终止 HTTPS

对于 .NET Core on Linux 容器类型,您可以使用 .ebextensions 配置文件和 nginx 配置文件(用于配置 nginx 服务器以使用 HTTPS)来启用 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

    在实例上创建私有密钥文件。将私有密钥内容替换为用于创建证书请求或自签名证书的私有密钥的内容。

  • container_commands 密钥在一切配置完成后重启 nginx 服务器,以便让该服务器加载 nginx 配置文件。

例 .ebextensions/https-instance.config
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----- container_commands: 01restart_nginx: command: "systemctl restart nginx"
注意

避免将包含私有密钥的配置文件提交到源控件。在测试完配置并确认其有效后,请在 Amazon S3 中存储私有密钥并修改配置以在部署期间下载该密钥。有关说明,请参阅在 Amazon S3 中安全地存储私有密钥

将以下内容放置在源代码包的 .conf 目录内扩展名为 .platform/nginx/conf.d/ 的文件中(例如 .platform/nginx/conf.d/https.conf)。将 app_port 替换为您的应用程序侦听的端口号。此示例配置 nginx 服务器使用 SSL 侦听端口 443。有关 .NET Core on Linux 平台上的这些配置文件的更多信息,请参阅为 .NET Core on Linux 环境配置代理服务器

例 .platform/nginx/conf.d/https.conf
# HTTPS server server { listen 443 ssl; server_name localhost; 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://localhost:app_port; proxy_set_header Connection ""; proxy_http_version 1.1; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto https; } }

在单实例环境中,您还必须修改实例的安全组,以便允许端口 443 上的流量。以下配置文件使用 Amazon 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

对于负载均衡环境,将负载均衡器配置为保持不变地传输安全流量,或者解密后重新加密,以便实现端到端加密。