Symptoms
- Browsers show
NET::ERR_CERT_DATE_INVALID; API clients fail TLS handshakes. openssl s_clientshows an expirednotAfter.
echo | openssl s_client -connect www.example.com:443 -servername www.example.com 2>/dev/null | openssl x509 -noout -dates -issuer
1. Which certificate and why
aws acm list-certificates --certificate-statuses EXPIRED ISSUED --query "CertificateSummaryList[].[DomainName,CertificateArn,Status]" --output table
aws acm describe-certificate --certificate-arn <arn> \
--query "Certificate.{type:Type, status:Status, notAfter:NotAfter, renewal:RenewalSummary, eligible:RenewalEligibility, inUse:InUseBy}"
CloudFront certificates live in us-east-1; add --region us-east-1.
| Finding | Cause |
|---|---|
Type: IMPORTED | ACM never renews imported certificates — you must re-import |
RenewalSummary.RenewalStatus: PENDING_VALIDATION | DNS validation CNAME removed or changed |
| Email validation, nobody clicked | Renewal email went to an unmonitored mailbox |
RenewalEligibility: INELIGIBLE | Certificate not in use by an integrated service |
| CAA record forbids Amazon | CAA must allow amazon.com (or amazontrust.com) |
2. Fix the validation record (managed certificate)
aws acm describe-certificate --certificate-arn <arn> \
--query "Certificate.DomainValidationOptions[].ResourceRecord" --output table
Re-create the CNAME in Route 53 (or your DNS provider) exactly as shown. ACM retries validation automatically; this can take some time.
3. Fastest restore: request a new certificate
If renewal won't complete quickly, issue a new one and swap it on the listener:
aws acm request-certificate --domain-name www.example.com --subject-alternative-names example.com \
--validation-method DNS
# create the validation CNAMEs, wait for ISSUED
aws acm wait certificate-validated --certificate-arn <new-arn>
aws elbv2 modify-listener --listener-arn <https-listener-arn> \
--certificates CertificateArn=<new-arn>
For CloudFront, update the distribution's viewer certificate; for API Gateway custom domains, update the domain name's certificate ARN.
4. Imported certificates
aws acm import-certificate --certificate-arn <existing-arn> \
--certificate fileb://cert.pem --private-key fileb://key.pem --certificate-chain fileb://chain.pem
Re-importing to the same ARN updates every service using it without changing their configuration.
Tip
Re-import with the full intermediate chain. Missing intermediates break older clients and Java truststores even when browsers look fine.
Prevent it next time
- Prefer ACM-issued certificates with DNS validation; keep validation CNAMEs in IaC.
- EventBridge rule on
ACM Certificate Approaching Expirationevents to on-call. - AWS Config managed rule
acm-certificate-expiration-check. - Track imported certificates separately; they have no auto-renewal.