SSL Certificate Renewal Checklist
Step-by-step SSL certificate renewal checklist. From inventory to validation to deployment — never miss a renewal or break your site with a bad certificate swap.
Renewing an SSL certificate sounds simple: get a new one, install it, done. In practice, it's where things go wrong. A renewal with the wrong SANs takes down your API. A missing intermediate breaks mobile browsers. A forgotten load balancer serves the old cert. This checklist ensures nothing falls through the cracks.
When to Start the Renewal Process
Don't wait until the last week. Start early enough to fix problems without the pressure of an imminent expiry.
| Certificate Type | Validity Period | Start Renewal | Why |
|---|---|---|---|
| Let's Encrypt | 90 days | 30 days before expiry | Auto-renewal should handle this, but verify it's working |
| Commercial DV | 1 year (397 days max) | 30 days before expiry | Simple validation, fast issuance |
| Commercial OV | 1 year | 45 days before expiry | Organization validation takes time |
| Commercial EV | 1 year | 60 days before expiry | Extended validation requires paperwork and verification calls |
| Wildcard | Varies | 30-45 days before expiry | Wildcard DNS validation can have complications |
Phase 1: Pre-Renewal Inventory
Before you renew anything, know exactly what you're working with.
Identify the certificate to renew
Which domain(s) does it cover? Check the Subject Alternative Names (SANs), not just the Common Name. A certificate for example.com might also cover www.example.com, api.example.com, and staging.example.com.
openssl s_client -connect yourdomain.com:443 -servername yourdomain.com </dev/null 2>/dev/null | openssl x509 -noout -ext subjectAltName
Confirm the certificate provider/CA
Check who issued the current certificate:
openssl s_client -connect yourdomain.com:443 -servername yourdomain.com </dev/null 2>/dev/null | openssl x509 -noout -issuer
Are you renewing with the same CA? Switching CAs? This affects the process.
Check the certificate type
Is it DV, OV, or EV? Single domain, multi-domain (SAN), or wildcard? The type determines the validation process and timeline.
Document where the certificate is installed
List every server, load balancer, CDN, and service that uses this certificate. Common locations that get forgotten:
- Web servers (Nginx, Apache, IIS)
- Load balancers (AWS ALB/ELB, Cloudflare, Fastly)
- Reverse proxies
- Mail servers
- API gateways
- Docker containers with baked-in certificates
- Third-party services (CDNs, WAFs) where you uploaded the cert manually
Check if auto-renewal is configured
If you're using Let's Encrypt with Certbot:
sudo certbot certificates
This shows all managed certificates and their renewal status. If auto-renewal is configured, verify the cron job or systemd timer is active:
sudo systemctl status certbot.timer
Phase 2: Generate the CSR and Renew
Generate a new private key and CSR
For most renewals, generate a fresh key pair:
openssl req -new -newkey rsa:2048 -nodes -keyout yourdomain.key -out yourdomain.csr -subj "/CN=yourdomain.com"
For certificates with multiple SANs, you'll need an OpenSSL config file or your CA's portal to specify all domains.
Reuse vs. new key
Best practice is to generate a new private key with each renewal. This limits exposure if the old key was compromised without your knowledge. Some CAs require a new key; others allow reuse.
Submit the renewal to your CA
- Let's Encrypt:
sudo certbot certonly --webroot -w /var/www/html -d yourdomain.com -d www.yourdomain.com(or use DNS validation for wildcard) - Commercial CA: Log into the CA's portal, paste the CSR, select the renewal period, and complete payment
- AWS Certificate Manager: ACM auto-renews for certificates it manages. Verify in the console that renewal is in progress.
Complete domain validation
Depending on the validation method:
- HTTP validation: Place a file at a specific URL (Certbot does this automatically)
- DNS validation: Add a CNAME or TXT record to your domain's DNS
- Email validation: Respond to an email sent to admin@yourdomain.com or a similar address
- Organization validation (OV/EV): Respond to CA's verification calls and provide documentation
Download the new certificate
Once issued, download the certificate and any intermediate certificates. You need:
- The leaf certificate (your domain's cert)
- The intermediate certificate(s) (sometimes called the "CA bundle")
- Optionally, the root certificate (usually not needed -- it's in the browser's trust store)
Track every certificate renewal in one dashboard
See all your certificates, their expiry dates, and renewal status at a glance.
Phase 3: Install and Deploy
This is where most renewals go wrong. The certificate is valid, but it's installed incorrectly.
Verify the certificate before installing
Before touching your production server, confirm the new certificate is correct:
# Check that the key matches the certificate
openssl x509 -noout -modulus -in yourdomain.crt | openssl md5
openssl rsa -noout -modulus -in yourdomain.key | openssl md5
Both commands should output the same MD5 hash. If they don't, the key and certificate don't match.
# Verify the certificate chain
openssl verify -CAfile intermediate.crt yourdomain.crt
Create the full chain file
Most servers need a single file with the leaf certificate and intermediates concatenated:
cat yourdomain.crt intermediate.crt > fullchain.crt
Order matters: leaf certificate first, then intermediate(s), root last (if included).
Install on the web server
Replace the old certificate files with the new ones and update the configuration if file paths changed.
Nginx:
ssl_certificate /etc/ssl/fullchain.crt;
ssl_certificate_key /etc/ssl/yourdomain.key;
Apache:
SSLCertificateFile /etc/ssl/yourdomain.crt
SSLCertificateKeyFile /etc/ssl/yourdomain.key
SSLCertificateChainFile /etc/ssl/intermediate.crt
Test the config before reloading:
# Nginx
sudo nginx -t
# Apache
sudo apachectl configtest
Reload the web server
# Nginx
sudo systemctl reload nginx
# Apache
sudo systemctl reload apache2
Use reload not restart when possible -- reload applies the new certificate without dropping existing connections.
Update all other locations
Remember that list from Phase 1? Go through every location where the certificate is installed:
- Upload to load balancers (AWS ALB/ELB, etc.)
- Update CDN configurations (Cloudflare, Fastly, CloudFront)
- Update any Docker images that include the certificate
- Update any services that pin the certificate
Phase 4: Post-Renewal Verification
The certificate is installed. Now verify it's actually working everywhere.
Verify the new certificate is being served
openssl s_client -connect yourdomain.com:443 -servername yourdomain.com </dev/null 2>/dev/null | openssl x509 -noout -dates -issuer
Confirm the notAfter date matches the new certificate, not the old one.
Verify the full chain
openssl s_client -connect yourdomain.com:443 -servername yourdomain.com </dev/null 2>/dev/null | grep "Verify return code"
Should return Verify return code: 0 (ok).
Test all SANs
Check every domain covered by the certificate, not just the primary one:
for domain in yourdomain.com www.yourdomain.com api.yourdomain.com; do
echo -n "$domain: "
openssl s_client -connect $domain:443 -servername $domain </dev/null 2>/dev/null | openssl x509 -noout -enddate
done
Run Qualys SSL Labs test
Go to ssllabs.com/ssltest and run a full test. Verify you get an A or A+ grade. Check for chain issues, protocol warnings, and cipher suite problems.
Update your monitoring
If you're using SSL monitoring, verify the tool has picked up the new certificate and the expiry date has been updated. Some monitoring tools detect changes automatically; others need a manual refresh.
Secure the old private key
Delete or securely archive the old private key. There's no reason to keep it accessible after the certificate has been replaced.
Common Renewal Mistakes
Forgetting a SAN
example.com but not www.example.com. Half your traffic gets SSL errors.Missing intermediate certificate
Mismatched key and certificate
Only updating one server
Not testing before reload
Certificate pinning can make renewals dangerous
If any of your clients pin the certificate (HPKP, mobile app pinning), a renewal with a new key will lock those clients out. Know your pinning situation before you renew.
The best way to avoid renewal mistakes is to make renewals boring and routine. Automate what you can, monitor what you automate, and use this checklist for the manual parts.
Related Articles
A renewal isn't done when the certificate is issued. It's done when every server, every SAN, and every client is verified.
Never miss an SSL certificate expiry
Monitor your certificates and get alerts before they expire. Free for up to 3 certificates.