Why Automated Certificate Management Prevents Outages
SSL/TLS certificates are the foundation of web security, yet certificate expiration remains one of the most preventable causes of service outages. According to Keyfactor's 2024 PKI and Digital Trust Report, 88% of organizations experienced unplanned outages due to expired certificates, with an average of three certificate-related outages over a 24-month period. The average cost of these outages exceeds $2.8 million per incident.
High-profile certificate expirations continue to affect major organizations. In January 2026, League of Legends experienced a global outage when their SSL certificate expired—exactly 10 years after a similar incident. Microsoft Teams, Spotify, LinkedIn, and Ericsson have all suffered outages due to expired certificates. AWS Certificate Manager eliminates this risk through fully automated certificate management.
The Four Most Dangerous Certificate Management Failures
Manual Certificate Renewal
Relying on manual processes creates single points of failure. Team members forget renewal dates, vacation schedules interfere, and certificates expire during critical business periods when staff may be unavailable.
Self-Signed or Invalid Certificates
Self-signed certificates trigger browser security warnings, destroying user confidence and severely impacting SEO rankings. Search engines penalize sites without valid certificates from trusted authorities.
Insecure Private Key Storage
Storing private keys in code repositories, shared drives, or unencrypted locations creates massive vulnerabilities. Key compromise can lead to man-in-the-middle attacks and complete domain impersonation.
Outdated TLS Protocols
Using deprecated TLS versions (1.0, 1.1) or weak cipher suites exposes encrypted traffic to known attacks. Modern security requires TLS 1.2 minimum, with TLS 1.3 recommended for enhanced security.
Request SSL Certificate in ACM
~5 minutes
AWS Certificate Manager provides free public SSL/TLS certificates for use with AWS services. Requesting a certificate with wildcard support covers your main domain and all subdomains with a single certificate.
Prerequisites
- AWS account with appropriate IAM permissions
- Domain name you own and want to secure
- Access to domain DNS settings (Route 53 or external provider)
- Target AWS service for certificate attachment (CloudFront, ALB, API Gateway)
Console Steps
1.1 Navigate to Certificate Manager
- Sign in to AWS Console
- Search for "Certificate Manager" in the services search
- Click "AWS Certificate Manager"
- Critical: For CloudFront, ensure you're in us-east-1 (N. Virginia) region
1.2 Request Public Certificate
- Click "Request a certificate"
- Select "Request a public certificate"
- Click "Next"
1.3 Configure Domain Names
- Enter your fully qualified domain name:
example.com - Click "Add another name to this certificate"
- Add wildcard subdomain:
*.example.com - This configuration covers your main domain and all subdomains
# Certificate covers:
example.com # Apex domain
www.example.com # WWW subdomain
api.example.com # API subdomain
app.example.com # Application subdomain
admin.example.com # Admin subdomain
*.example.com # Any other subdomain
1.4 Select Validation Method
- DNS validation (Recommended): Automatic renewal, no email required
- Email validation: Requires manual approval via admin email addresses
- Choose "DNS validation" for automation
- Click "Next"
1.5 Add Tags and Request
- Add tags for organization:
- Key:
Environment, Value:Production - Key:
Project, Value:Website - Key:
ManagedBy, Value:ACM - Click "Request"
AWS CLI Method
# Request certificate with wildcard support
aws acm request-certificate \
--domain-name example.com \
--subject-alternative-names "*.example.com" \
--validation-method DNS \
--tags Key=Environment,Value=Production Key=Project,Value=Website \
--region us-east-1
# Response includes CertificateArn for use in subsequent steps
Validate Domain Ownership via DNS
~10 minutes
DNS validation proves you control the domain before AWS issues the certificate. The validation CNAME records must remain in place permanently to enable automatic renewal—ACM uses these same records to re-validate ownership every 60 days before certificate expiration.
Console Steps (Route 53)
2.1 View Validation Records
- In ACM console, click on your pending certificate
- View domains in "Pending validation" status
- Each domain shows required CNAME record details
2.2 Create DNS Records (Route 53 One-Click)
- Click "Create record in Route 53" button for each domain
- Click "Create records"
- AWS automatically adds the required CNAME records
- Validation typically completes within 5-30 minutes
Manual DNS Configuration (External Providers)
2.3 Add Records to External DNS Provider
- Copy the CNAME record details from ACM console
- Log in to your DNS provider (GoDaddy, Cloudflare, Namecheap, etc.)
- Create CNAME records with the provided name and value
- Wait for DNS propagation (5-30 minutes, up to 72 hours)
# CNAME records to add to your DNS provider
# Record 1 (apex domain)
Type: CNAME
Name: _abc123def456.example.com
Value: _xyz789.acm-validations.aws.
# Record 2 (wildcard)
Type: CNAME
Name: _abc123def456.example.com
Value: _xyz789.acm-validations.aws.
# Note: Both domains often use the same validation record
Verify Validation Status
# Verify DNS record is resolving
dig _abc123def456.example.com CNAME
# Alternative: Use nslookup
nslookup -type=CNAME _abc123def456.example.com
# Check certificate status via CLI
aws acm describe-certificate \
--certificate-arn arn:aws:acm:us-east-1:ACCOUNT:certificate/CERT-ID \
--query 'Certificate.Status' \
--region us-east-1
# Expected output when validated: "ISSUED"
Configure Auto-Renewal Monitoring
~5 minutes
While ACM handles renewal automatically, proactive monitoring ensures you're alerted to any renewal failures before they cause outages. ACM begins renewal attempts 60 days before expiration and sends Health Dashboard notifications at 45, 30, 15, 7, 3, and 1 day intervals if renewal fails.
Console Steps
3.1 Verify Auto-Renewal Eligibility
- Navigate to ACM console
- Click on your certificate
- Check "Renewal eligibility" shows "Eligible"
- Verify "Renewal status" shows "Success" or "Pending" (if within 60 days of expiration)
Create CloudWatch Alarm for Certificate Expiration
# Create SNS topic for certificate alerts
aws sns create-topic \
--name acm-certificate-alerts \
--region us-east-1
# Subscribe email to the topic
aws sns subscribe \
--topic-arn arn:aws:sns:us-east-1:ACCOUNT:acm-certificate-alerts \
--protocol email \
--notification-endpoint security@yourcompany.com \
--region us-east-1
# Create CloudWatch alarm for certificate expiration
aws cloudwatch put-metric-alarm \
--alarm-name "ACM-Certificate-Expiring-Soon" \
--alarm-description "Alert when ACM certificate expires within 30 days" \
--metric-name DaysToExpiry \
--namespace AWS/CertificateManager \
--statistic Minimum \
--period 86400 \
--threshold 30 \
--comparison-operator LessThanThreshold \
--dimensions Name=CertificateArn,Value=arn:aws:acm:us-east-1:ACCOUNT:certificate/CERT-ID \
--evaluation-periods 1 \
--alarm-actions arn:aws:sns:us-east-1:ACCOUNT:acm-certificate-alerts \
--region us-east-1
Enable AWS Config Rule for Compliance Monitoring
# Create AWS Config rule to check certificate expiration
aws configservice put-config-rule \
--config-rule '{
"ConfigRuleName": "acm-certificate-expiration-check",
"Description": "Checks if ACM certificates expire within specified days",
"Source": {
"Owner": "AWS",
"SourceIdentifier": "ACM_CERTIFICATE_EXPIRATION_CHECK"
},
"InputParameters": "{\"daysToExpiration\": \"30\"}",
"MaximumExecutionFrequency": "TwentyFour_Hours"
}' \
--region us-east-1
# This rule marks certificates as NON_COMPLIANT when expiring within 30 days
Create EventBridge Rule for Renewal Failures
# Create EventBridge rule for ACM Health events
aws events put-rule \
--name "ACM-Certificate-Renewal-Issues" \
--event-pattern '{
"source": ["aws.health"],
"detail-type": ["AWS Health Event"],
"detail": {
"service": ["ACM"],
"eventTypeCategory": ["scheduledChange", "issue"]
}
}' \
--region us-east-1
# Add SNS target for notifications
aws events put-targets \
--rule "ACM-Certificate-Renewal-Issues" \
--targets "Id"="1","Arn"="arn:aws:sns:us-east-1:ACCOUNT:acm-certificate-alerts" \
--region us-east-1
Integrate with CloudFront Distribution
~5 minutes
CloudFront integration provides global SSL termination at edge locations, improving both security and performance. Modern TLS security policies enforce TLS 1.2 or 1.3 with strong cipher suites, and CloudFront now supports post-quantum cryptography with TLS 1.3.
Console Steps
4.1 Create or Edit CloudFront Distribution
- Navigate to CloudFront service in AWS Console
- Click "Create Distribution" or edit existing distribution
- Configure origin settings for your website/ALB/S3
4.2 Configure SSL Certificate
- In "Settings" section, find "Custom SSL certificate"
- Select your ACM certificate from the dropdown
- Certificate must be in us-east-1 region to appear in list
4.3 Select Security Policy
- Choose "Security policy" for minimum TLS version
- Recommended: TLSv1.2_2021 (balanced security and compatibility)
- Maximum Security: TLSv1.3_2025 or TLSv1.2_2025 (newest policies)
- Set "Supported HTTP versions" to HTTP/2 and HTTP/3
4.4 Configure Alternate Domain Names
- In "Alternate domain names (CNAMEs)" field
- Enter:
example.com - Add:
www.example.com - Domain names must match those in your certificate
4.5 Enable HTTPS Redirect
- Set "Viewer Protocol Policy" to "Redirect HTTP to HTTPS"
- This ensures all traffic uses SSL encryption
- Click "Create Distribution" or "Save Changes"
AWS CLI Method
# Create CloudFront distribution configuration
aws cloudfront create-distribution \
--distribution-config '{
"CallerReference": "ssl-setup-2026",
"Comment": "Production distribution with ACM SSL",
"Enabled": true,
"Origins": {
"Quantity": 1,
"Items": [{
"Id": "primary-origin",
"DomainName": "origin.example.com",
"CustomOriginConfig": {
"HTTPPort": 80,
"HTTPSPort": 443,
"OriginProtocolPolicy": "https-only",
"OriginSslProtocols": {
"Quantity": 1,
"Items": ["TLSv1.2"]
}
}
}]
},
"DefaultCacheBehavior": {
"TargetOriginId": "primary-origin",
"ViewerProtocolPolicy": "redirect-to-https",
"AllowedMethods": {
"Quantity": 2,
"Items": ["GET", "HEAD"]
},
"CachePolicyId": "658327ea-f89d-4fab-a63d-7e88639e58f6"
},
"ViewerCertificate": {
"ACMCertificateArn": "arn:aws:acm:us-east-1:ACCOUNT:certificate/CERT-ID",
"SSLSupportMethod": "sni-only",
"MinimumProtocolVersion": "TLSv1.2_2021"
},
"Aliases": {
"Quantity": 2,
"Items": ["example.com", "www.example.com"]
}
}'
Update DNS to Point to CloudFront
# After CloudFront deployment completes (5-15 minutes)
# Copy the CloudFront domain name: d123456789.cloudfront.net
# Route 53: Create ALIAS record for apex domain
aws route53 change-resource-record-sets \
--hosted-zone-id Z1234567890ABC \
--change-batch '{
"Changes": [{
"Action": "UPSERT",
"ResourceRecordSet": {
"Name": "example.com",
"Type": "A",
"AliasTarget": {
"HostedZoneId": "Z2FDTNDATAQYW2",
"DNSName": "d123456789.cloudfront.net",
"EvaluateTargetHealth": false
}
}
}]
}'
# Create CNAME for www subdomain
aws route53 change-resource-record-sets \
--hosted-zone-id Z1234567890ABC \
--change-batch '{
"Changes": [{
"Action": "UPSERT",
"ResourceRecordSet": {
"Name": "www.example.com",
"Type": "CNAME",
"TTL": 300,
"ResourceRecords": [{"Value": "d123456789.cloudfront.net"}]
}
}]
}'
Validate Your SSL/TLS Configuration
Complete these verification steps to ensure your SSL setup is working correctly and will maintain security over time:
SSL Testing Commands
#!/bin/bash
# SSL Certificate Validation Script
DOMAIN="example.com"
echo "=== SSL Certificate Validation ==="
# Test HTTPS connection
echo -e "\n1. Testing HTTPS connection..."
curl -sI "https://${DOMAIN}" | head -5
# Check certificate details
echo -e "\n2. Certificate details..."
echo | openssl s_client -connect ${DOMAIN}:443 -servername ${DOMAIN} 2>/dev/null | \
openssl x509 -noout -subject -issuer -dates
# Verify certificate chain
echo -e "\n3. Certificate chain..."
echo | openssl s_client -connect ${DOMAIN}:443 -servername ${DOMAIN} 2>/dev/null | \
grep -E "^(Certificate chain| [0-9]+ s:)"
# Check TLS version
echo -e "\n4. TLS version in use..."
echo | openssl s_client -connect ${DOMAIN}:443 -servername ${DOMAIN} 2>/dev/null | \
grep "Protocol :"
# Test HTTP to HTTPS redirect
echo -e "\n5. HTTP redirect test..."
curl -sI "http://${DOMAIN}" | grep -E "^(HTTP|Location)"
echo -e "\n=== Validation Complete ==="
Online Testing Tools
- SSL Labs Server Test: https://www.ssllabs.com/ssltest/ - Comprehensive SSL analysis with grade
- SSL Shopper: https://www.sslshopper.com/ssl-checker.html - Quick certificate verification
- SecurityHeaders.com: https://securityheaders.com - Check security headers including HSTS
Common SSL/TLS Mistakes to Avoid
Requesting certificates outside us-east-1 for CloudFront. CloudFront only accepts ACM certificates from the N. Virginia region regardless of where your origin is located. Always request CloudFront certificates in us-east-1.
Removing DNS validation records after certificate issuance. ACM needs these CNAME records to automatically renew certificates 60 days before expiration. Deleting them causes renewal failures.
Using outdated TLS policies for backward compatibility. TLSv1.0 and TLSv1.1 have known vulnerabilities. Use TLSv1.2_2021 as minimum baseline, or TLSv1.2_2025/TLSv1.3_2025 for maximum security.
Assuming auto-renewal always works without monitoring. DNS changes, CAA record issues, or AWS service disruptions can cause renewal failures. Always configure CloudWatch alarms and SNS notifications.
Not associating certificates with AWS services. Certificates not attached to CloudFront, ALB, or API Gateway are not eligible for automatic renewal. Always associate certificates immediately after validation.
Want Continuous SSL/TLS Security Monitoring?
Don't wait for certificate expiration to bring down your services. AWSight provides continuous monitoring of your SSL/TLS certificates, expiration dates, and security configurations—alerting you before issues become outages.