使用 Elastic Beanstalk 应用程序启用 HTTPS 和 HTTP

sri*_*man 6 https amazon-web-services amazon-elastic-beanstalk

我们正在尝试设置对我们使用 Elastic Beanstalk 部署的网站的 HTTPS 访问。

以下是我们已采取的步骤:

  1. 从 Amazon Certificate Manager 获得证书。

  2. 在我们的 EB 应用程序环境中,在 Configuration 下,我们向 Classic Load Balancer 添加了另一个侦听器。这个新监听器的设置是这样的:

    Port: 443  
    Protocol: HTTPS  
    Instance Port: 443  
    Instance Protocol: HTTPS  
    SSL certificate: (certificate that we created in step 1)  
    
    Run Code Online (Sandbox Code Playgroud)
  3. 由于添加此新侦听器创建了另一个具有 443 入站规则的安全组,因此该安全组已添加到实例中。

  4. 最后,我们转到了负载均衡器页面,对于这个应用程序的负载均衡器,我们添加了另一个具有以下设置的侦听器:

    Load Balancer Protocol: HTTPS  
    Load Balancer Port: 443  
    Instance Protocol: HTTPS  
    Instance Port: 443  
    Cipher: ELBSecurityPolicy-2016-08 (default)  
    SSL Certificate: (certificate that we created in step 1)  
    
    Run Code Online (Sandbox Code Playgroud)

但是我们仍然无法通过https访问我们的网站。知道还需要做什么吗?

还有一点。在步骤 #4 中,如果只有 443 负载均衡器端口存在以下设置:

HTTPS 443 HTTP 80 (cert)
Run Code Online (Sandbox Code Playgroud)

随后,该网站是通过访问HTTPS,而非HTTP。

所以这个调整表明证书没有问题。

我们的配置中缺少什么?

Mat*_*t D 5

如果您在 EB 设置中将证书分配给侦听器,默认情况下它会分配给负载均衡器。负载均衡器终止来自 Internet 的 HTTPS 连接,并使用 HTTP(无加密)与实例通信。因此,您需要从负载均衡器向实例打开未加密的端口 80。

如果您必须对实例进行端到端加密,则需要将 EB 环境配置为直接通过负载均衡器传递 HTTPS:

.ebextensions/https-reencrypt-clb.config

将此配置文件与 Classic Load Balancer 结合使用。除了配置负载均衡器,配置文件还将默认健康检查改为使用443端口和HTTPS,保证负载均衡器可以安全连接。

option_settings:
  aws:elb:listener:443:
    InstancePort: 443
    InstanceProtocol: HTTPS
  aws:elasticbeanstalk:application:
    Application Healthcheck URL: HTTPS:443/
Run Code Online (Sandbox Code Playgroud)

为您的实例更新您的安全组配置

.ebextensions/https-instance-securitygroup.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
Run Code Online (Sandbox Code Playgroud)

并在实例上配置证书,可以是自签名证书:

.ebextensions/https-backendauth.config

option_settings:
  # Backend Encryption Policy
  aws:elb:policies:backendencryption:
    PublicKeyPolicyNames: backendkey
    InstancePorts:  443
  # Public Key Policy
  aws:elb:policies:backendkey:
    PublicKey: |
      -----BEGIN CERTIFICATE-----
      ################################################################
      ################################################################
      ################################################################
      ################################################################
      ################################################
      -----END CERTIFICATE-----
Run Code Online (Sandbox Code Playgroud)

在此处查看包含不同类型负载均衡器选项的更详细的纲要。