在运行 Tomcat 的 EC2 实例上终止 HTTPS - AWS Elastic Beanstalk

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

在运行 Tomcat 的 EC2 实例上终止 HTTPS

对于 Tomcat 容器类型,您可使用配置文件来允许 HTTP Server 在充当 Tomcat 的反向代理时使用 HTTPS。

将以下代码段添加到您的配置文件中,按照提示替换证书和私有密钥资料,并将该文件保存在源包的 .ebextensions 目录中。该配置文件执行以下任务:

  • files 密钥在实例上创建以下文件:

    /etc/pki/tls/certs/server.crt

    在实例上创建证书文件。将证书文件内容替换为证书的内容。

    注意

    YAML 依赖一致的缩进。当替换示例配置文件中的内容时,应匹配缩进级别,并且确保您的文本编辑器使用空格而不是字符来进行缩进。

    /etc/pki/tls/certs/server.key

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

    /opt/elasticbeanstalk/hooks/appdeploy/post/99_start_httpd.sh

    创建部署后挂钩脚本以重新启动 httpd 服务。

例 .ebextensions/https-instance.config
files: /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----- /opt/elasticbeanstalk/hooks/appdeploy/post/99_start_httpd.sh: mode: "000755" owner: root group: root content: | #!/usr/bin/env bash sudo service httpd restart

您还必须将环境的代理服务器配置为在端口 443 上进行侦听。以下 Apache 2.4 配置将在端口 443 上添加一个侦听器。要了解更多信息,请参阅配置代理服务器

例 .ebextensions/httpd/conf.d/ssl.conf
Listen 443 <VirtualHost *:443> ServerName server-name SSLEngine on SSLCertificateFile "/etc/pki/tls/certs/server.crt" SSLCertificateKeyFile "/etc/pki/tls/certs/server.key" <Proxy *> Require all granted </Proxy> ProxyPass / http://localhost:8080/ retry=0 ProxyPassReverse / http://localhost:8080/ ProxyPreserveHost on ErrorLog /var/log/httpd/elasticbeanstalk-ssl-error_log </VirtualHost>

您的证书供应商可能包含中间证书,可安装此证书以提高与移动客户端的兼容性。使用中间证书颁发机构 (CA) 捆绑配置 Apache,方法是将以下内容添加到您的 SSL 配置文件 (如需了解位置,请参阅扩展并覆盖默认 Apache 配置 — Amazon Linux AMI (AL1)):

  • ssl.conf 文件内容中,指定链文件:

    SSLCertificateKeyFile "/etc/pki/tls/certs/server.key" SSLCertificateChainFile "/etc/pki/tls/certs/gd_bundle.crt" SSLCipherSuite EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH
  • 使用中间证书的内容向 files 密钥添加新条目:

    files: /etc/pki/tls/certs/gd_bundle.crt: mode: "000400" owner: root group: root content: | -----BEGIN CERTIFICATE----- First intermediate certificate -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- Second intermediate certificate -----END CERTIFICATE-----
注意

避免将包含私有密钥的配置文件提交到源控件。在测试完配置并确认其有效后,请在 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

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