如何为AWS :: ElasticLoadBalancingV2 :: Listener设置多个证书

时间:2019-01-30 18:30:51

标签: amazon-web-services ssl listener amazon-cloudformation

嗨,我在为ELB侦听器设置multipme证书时遇到问题。 这是我的CF模板的片段:

  DiscoveryListenerHTTPS:
    Type: AWS::ElasticLoadBalancingV2::Listener
    DependsOn:
      - DiscoveryLoadBalancer
      - DiscoveryLoadBalancerTargetGroup
    Properties:
      Certificates:
       - CertificateArn: !Ref CertificateArn1
       - CertificateArn: !Ref CertificateArn2

,响应为: 最多为 '1' 证书ARNS可以指定,但 '2' 中指定(服务:AmazonElasticLoadBalancingV2;状态码:400;错误代码:TooManyCertificates;请求ID:XXXXXXXXX)

3 个答案:

答案 0 :(得分:5)

这对我有用,是一个使用443端口的侦听器的示例,该侦听器使用默认证书,然后使用包含至少一个证书并与先前创建的侦听器相关联的证书列表:

  Listener443:
    DependsOn:
    - LoadBalancer
    Type: AWS::ElasticLoadBalancingV2::Listener
    Properties:
      Certificates:
        - CertificateArn: !Ref CertificateARN
      LoadBalancerArn: !Ref LoadBalancer
      DefaultActions:
        - Type: fixed-response
          FixedResponseConfig:        
            ContentType: text/plain
            MessageBody: "Not Found"
            StatusCode: 404
      Port: 443
      Protocol: HTTPS

  CertificatesList:
    Type: AWS::ElasticLoadBalancingV2::ListenerCertificate
    Properties: 
      Certificates: 
        - CertificateArn: !Ref CertificateARN2
      ListenerArn: !Ref Listener443

答案 1 :(得分:2)

有点笨拙;用于创建侦听器的CF模板仅设置默认证书。

您应该可以使用此对象向侦听器添加其他证书: https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticloadbalancingv2-listenercertificate.html

答案 2 :(得分:0)

来这里寻找相同的答案。发现答案/注释中没有明确列出答案,所以我要这样做。尽管可以为HTTPS侦听器指定多个SSL证书,但是不允许直接在CFN模板中的HTTPS侦听器资源上指定多个证书。您必须在模板中为另一个证书创建另一个资源,例如:

AdditionalListenerCertificates:
        Type: AWS::ElasticLoadBalancingV2::ListenerCertificate
        Properties:
            Certificates:
              - CertificateArn: !Join
                - ":"
                - - "arn:aws:acm"
                  - !Ref AWS::Region
                  - !Ref AWS::AccountId
                  - !Join ["/", ["certificate", "<you-certificate-id>"]]
            ListenerArn: !Ref HTTPSListener