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 TypeValidity PeriodStart RenewalWhy
Let's Encrypt90 days30 days before expiryAuto-renewal should handle this, but verify it's working
Commercial DV1 year (397 days max)30 days before expirySimple validation, fast issuance
Commercial OV1 year45 days before expiryOrganization validation takes time
Commercial EV1 year60 days before expiryExtended validation requires paperwork and verification calls
WildcardVaries30-45 days before expiryWildcard DNS validation can have complications

Phase 1: Pre-Renewal Inventory

Before you renew anything, know exactly what you're working with.

1

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
2

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.

3

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.

4

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
5

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

1

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.

2

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.
3

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
4

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.

1

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
2

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).

3

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
4

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.

5

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.

1

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.

2

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).

3

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
4

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.

5

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.

6

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

The new certificate covers example.com but not www.example.com. Half your traffic gets SSL errors.

Missing intermediate certificate

The leaf cert is valid but the chain is broken. Chrome works (it caches intermediates). Firefox, curl, and mobile apps break.

Mismatched key and certificate

You generated a new key but submitted a CSR from the old one, or vice versa. The server won't start.

Only updating one server

The load balancer has the new cert, but the origin server behind it still has the old one. Direct-to-origin traffic breaks.

Not testing before reload

You typo the certificate path in the config, reload the server, and it crashes. Always test the config first.

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.


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.