在ALB(Application Load Balancer)侦听器中未列出导入的SSL证书可能是由于以下原因导致的:
证书未正确导入:请确保已将SSL证书导入到AWS证书管理器(ACM)中,并验证证书的状态为“已发行”。
证书与绑定的域名不匹配:请确保证书的Common Name(CN)或Subject Alternative Names(SAN)与绑定到ALB上的域名匹配。如果证书只适用于特定的域名,而不是通配符或泛域名证书,请确保绑定的域名与证书完全匹配。
以下是一个解决方法的示例代码,用于在ALB侦听器中列出所有导入的SSL证书:
import boto3
def get_imported_certificates():
client = boto3.client('acm')
response = client.list_certificates(CertificateStatuses=['ISSUED'])
certificates = response['CertificateSummaryList']
return certificates
def get_listener_certificates(listener_arn):
client = boto3.client('elbv2')
response = client.describe_listener_certificates(ListenerArn=listener_arn)
certificates = response['Certificates']
return certificates
def add_certificate_to_listener(listener_arn, certificate_arn):
client = boto3.client('elbv2')
response = client.add_listener_certificates(
ListenerArn=listener_arn,
Certificates=[{'CertificateArn': certificate_arn}]
)
return response
# 示例用法
listener_arn = 'arn:aws:elasticloadbalancing:region:account-id:listener/app/load-balancer-name/load-balancer-port/listener-id'
imported_certificates = get_imported_certificates()
listener_certificates = get_listener_certificates(listener_arn)
for certificate in imported_certificates:
certificate_arn = certificate['CertificateArn']
if certificate_arn not in [cert['CertificateArn'] for cert in listener_certificates]:
response = add_certificate_to_listener(listener_arn, certificate_arn)
print(f"Added certificate {certificate_arn} to listener {listener_arn}.")
此代码示例使用boto3库来调用AWS ACM和ELBv2的API。首先,get_imported_certificates函数列出了所有已发行的证书。接下来,get_listener_certificates函数获取了指定侦听器ARN的证书列表。然后,add_certificate_to_listener函数将指定的证书添加到指定的侦听器。最后,使用示例用法,获取已导入和已绑定的证书列表,并将缺失的证书添加到侦听器中。
请注意,此代码示例仅供参考,可能需要根据您的具体需求进行修改和调整。