← Blog

SSL Renewed but Still Showing Expired? Old Cert Still Served

If your ssl certificate renewed but still showing expired , the root cause is almost often a mismatch between issuance and deployment: a new certificate file was generated by your certificate authority, but your web server, load balancer, or content delivery network is still serving the old certificate cached in memory. To resolve this immediately, your active network edge must be reloaded with the new public certificate and private key pair, and your intermediate certificate chain must be cleared across any upstream proxies.

For inbox-safety context, FTC phishing guidance recommends treating unexpected messages and requests for personal information with caution.

Seeing a bright red security interstitial after you believed you solved your certificate maintenance is stressful. For non-technical founders and product creators running live web apps on platforms like Bubble, Webflow, Lovable, Bolt, or Replit, browser warnings such as NET::ERR_CERT_DATE_INVALID or SEC_ERROR_EXPIRED_CERTIFICATE will immediately turn away paying users. Understanding the distinct difference between renewing a certificate and actively serving it is the first step toward getting your production app back online cleanly.

Renewing vs. Serving: Why Issuance Is Only Half the Job

Many domain registrars and automated certificate tools show an account dashboard status of "Active" or "Renewed" the moment a certificate signing request (CSR) is validated. However, issuing a cryptographic certificate simply produces a pair of cryptographic text blocks: your leaf certificate and your intermediate bundle. Generating those files does not alter the configuration of the web server listening for traffic on port 443.

When a visitor visits your web address, their browser completes a TLS handshake governed by standards documented by the Internet Engineering Task Force (IETF) RFC 8446. During this initial handshake, your server presents its public certificate chain. The browser inspects the validity window embedded directly inside the certificate's X.509 metadata (specifically the notBefore and notAfter timestamps). If the server hands the browser a certificate file whose notAfter timestamp has passed, the browser refuses the connection. It does not matter that your provider's billing dashboard or dashboard panel says your certificate is valid until next year; the browser only evaluates the raw cryptographic object handed to it over the network socket.

If you recently went through an unexpected lapse, review our detailed guide on what to do when an SSL certificate expires to understand how modern browsers flag untrusted endpoints.

The 4 Most Common Reasons the Old Certificate Is Still Served

When an ssl certificate renewed but still showing expired, the issue invariably traces back to one of four infrastructure disconnects. Systematically checking each scenario isolates the fault quickly.

1. The Web Server or Load Balancer Process Was Not Reloaded

Web servers like Nginx, Caddy, Apache, and proprietary reverse proxies load certificates into memory when the service boots. When automated tools such as Certbot create renewed certificate files on a server disk (for example, in /etc/letsencrypt/live/yourdomain/), the running daemon does not automatically inspect the disk on every incoming connection. Doing so would add prohibitive disk input/output overhead to every TLS handshake.

If the background service was not gracefully reloaded after the certificate files were overwritten, the process continues presenting the stale certificate held in RAM. Until a reload command (such as systemctl reload nginx) or server restart occurs, your users will receive the expired certificate.

2. The Edge CDN or Reverse Proxy Has Not Updated Its Origin Bundle

If your application sits behind Cloudflare, Fastly, AWS CloudFront, or an application platform's built-in edge network (such as Netlify, Vercel, or Webflow's global proxy), your domain actually uses two distinct TLS connections:

  • Client-to-Edge: The encrypted connection between your customer's browser and the edge proxy node closest to them.
  • Edge-to-Origin: The encrypted connection between the proxy network and your application's actual backend host (such as your Bubble environment, Replit instance, or custom host).

If you renewed the certificate on your backend origin server, but the CDN's edge proxy is still serving an unrenewed custom edge certificate, browsers see the expired edge certificate. Conversely, if your CDN uses "Strict" or "Full (Strict)" TLS validation against your origin, an expired certificate on the origin will cause the CDN edge to return an HTTP 526 invalid certificate error to visitors.

3. Subdomain Isolation and Disjointed Hostnames

A frequent blind spot for builders using tools like Lovable, Bolt, or Bubble is managing multiple hostnames. You may have renewed the apex domain (example.com) or the primary web address (www.example.com), while your application's backend routes traffic through an API subdomain (api.example.com) or a storage endpoint.

If your application code makes asynchronous background requests to an API endpoint that holds its own dedicated single-domain certificate, customers using your web app will suddenly experience broken forms, spinning buttons, and failed database queries. The web page itself loads fine, but open browser developer consoles show TLS handshake failures on the background endpoints. You can read more about resolving this pattern in our walkthrough on SSL expired on an API subdomain.

4. Local Client Certificate Caching and Stale Connection Pools

Modern desktop web browsers maintain long-lived HTTP keep-alive connection pools and internal cryptographic caches. If you visited your application while the certificate was expired, your browser might maintain that dead TLS session open across tabs. Even after the server is properly updated, visiting the URL in the same browser window can occasionally reuse the cached session state or socket, presenting the warning until the browser application is completely quit and restarted.

How to Check What Certificate Is Actually Being Served

rarely rely on a standard browser window on your primary workstation to verify a certificate fix. You must evaluate the live network response from an external, neutral network perspective.

Step 1: Inspect the Raw TLS Handshake with OpenSSL

The cleanest way to see what certificate your server is actively delivering is via terminal access using OpenSSL. Run the following command, replacing example.com with your application's domain:

openssl s_client -connect example.com:443 -servername example.com < /dev/null 2>/dev/null | openssl x509 -noout -dates -subject -issuer

This command instructs OpenSSL to connect to port 443, send the Server Name Indication (SNI) header for your domain, bypass standard browser caches, and output only the certificate's key metadata:

  • subject: Shows the Common Name (CN) and domains covered.
  • issuer: The certificate authority that signed the active certificate (e.g., Let's Encrypt, DigiCert, Google Trust Services).
  • notBefore / notAfter: The exact GMT timestamp range during which this certificate is valid.

If the notAfter date returned by this command is in the past, your server or CDN is unmistakably serving the expired certificate. If the date returned is comfortably in the future, your server is healthy, and any lingering user issues are isolated to local browser caches or localized DNS resolution delays.

Step 2: Inspect Independent Hostnames

Run the exact same command against every domain your application relies on. For example:

openssl s_client -connect api.example.com:443 -servername api.example.com < /dev/null 2>/dev/null | openssl x509 -noout -dates
openssl s_client -connect app.example.com:443 -servername app.example.com < /dev/null 2>/dev/null | openssl x509 -noout -dates

This isolates whether your primary marketing page was fixed while your application layer or webhook ingestion target was overlooked.

Step 3: Run an Independent Edge Diagnostic

If you do not have command line tools installed, use external web diagnostic scanners to query your domain from distributed points of presence worldwide. Using public testing utilities like the Qualys SSL Labs Server Test allows you to inspect the configuration of any public SSL web server. Often, multi-server environments will reveal that three out of four origin instances have the new certificate, but a fourth server still serves the expired file due to a deployment script failure.

Step-by-Step Resolution: Fixing Each Layer

When you have confirmed the active certificate is indeed out of date despite your renewal efforts, follow this sequential resolution path from origin to edge.

Hosting LayerCommon PlatformImmediate Action Required
Dedicated Host / VPSUbuntu, Debian, Nginx, CaddyReload proxy service daemon; verify file paths point to renewed live certs.
Cloud / No-Code AppBubble, Webflow, LovableToggle custom domain SSL renewal in platform settings; check external DNS CNAME alignment.
Proxy / Edge CDNCloudflare, FastlyPurge edge cache; re-issue Universal SSL edge certificate; review SSL/TLS encryption mode.
Local ClientChrome, Safari, macOS, WindowsFlush OS DNS cache; restart browser to clear active TLS socket pool.

Layer 1: Reloading the Origin Server

If you run a direct container, VPS, or server process (such as a custom Node.js, Python, or Go app deployed from Replit or Bolt), confirm that the runtime is reading the saved certificate files. For Nginx, execute a configuration test before reloading:

sudo nginx -t
sudo systemctl reload nginx

If you are using Apache HTTPD:

sudo apachectl configtest
sudo systemctl reload apache2

If you manage a custom Node.js or Python backend that reads server.crt and server.key directly into memory on startup, you must restart the application service entirely. Node.js does not hot-reload cryptographic contexts when files on disk change unless specific programmatic hooks are constructed.

Layer 2: Cloud Platform and No-Code Hosting Resets

For platforms like Bubble or Webflow, SSL is typically managed through automated certificate orchestrators running behind the scenes. When their automated jobs experience a transient failure, their dashboard can get out of sync with the underlying cloud edge. To fix this:

  1. Log into your platform dashboard (e.g., Bubble Settings > Domain / Email).
  2. Locate your custom domain settings. Most platforms offer a button labeled "Check SSL", "Re-verify Domain", or "Update Certificate".
  3. Clicking this re-triggers their background certificate provisioner against Let's Encrypt or Google Trust Services.
  4. Wait 5 to 10 minutes for edge distribution to complete across the platform's load balancers.

Layer 3: Cloudflare and CDN Edge Refresh

If your DNS routes through Cloudflare with the orange proxy cloud enabled, your visitors interact exclusively with Cloudflare's edge certificates. If Cloudflare's automated edge certificate failed to re-issue automatically:

  1. Navigate to SSL/TLS > Edge Certificates in the Cloudflare dashboard.
  2. Check the status of the Universal SSL certificate. If it says "Expired" or "Validation Pending", scroll to the bottom of the page.
  3. Click Disable Universal SSL, wait 5 minutes, and then click Enable Universal SSL. This forces Cloudflare's edge pipeline to order a brand-new certificate chain.
  4. Ensure your SSL/TLS encryption tier is configured to Full or Full (Strict) . rarely downgrade to "Flexible", as doing so disables encryption between Cloudflare and your server, leaving form submissions and authentication tokens vulnerable to interception.

Layer 4: Flushing Local Caches

Once the server and CDN pass the OpenSSL test, verify your own desktop environment. If Chrome or Safari still throw warnings, flush your operating system's DNS resolver cache. On macOS, run:

sudo dscacheutil -flushcache; sudo killall -HUP mDNSResponder

On Windows, run:

ipconfig /flushdns

Close all open browser windows completely and reopen your application in a private or incognito window. This prevents any preserved HTTP/2 multiplexed connections from serving historical certificate metadata.

Why Automated SSL Renewal Fails Quietly

Founders often ask: "Why did I have to deal with this at all? I turned on auto-renew two years ago." Automated systems work reliably until an external dependency shifts. Automated renewals can sometimes fail without notification due to unexpected infrastructure shifts.

1. DNS Record Changes and Broken ACME Validation

Automated certificate authorities use the ACME protocol to confirm domain ownership before issuing certificates. This is usually accomplished via an HTTP-01 challenge (placing a temporary cryptographic token under /.well-known/acme-challenge/ on your server) or a DNS-01 challenge (placing a temporary TXT record in your DNS zone).

If you migrated your DNS records, added a page redirection rule, changed your firewall settings, or switched DNS providers, the ACME verification bot will fail to read the validation challenge. The renewal daemon on your server might retry in the background, but after repeated failures, it silently enters a failure state while your current certificate runs out of time.

2. CAA Record Restrictions

Certification Authority Authorization (CAA) records are DNS entries that specify which certificate authorities are legally permitted to issue certificates for your domain. If you or a domain registrar added a CAA record that permits only letsencrypt.org, but your web hosting platform attempts to issue a renewed certificate through DigiCert or Google Trust Services, the request will be automatically rejected at the certificate authority level.

3. Expired API Tokens

If your renewal infrastructure uses automated DNS-01 challenges via an API key connecting to Cloudflare, Namecheap, or AWS Route 53, that API token may have expired or had its permissions revoked. When the automated renewal script runs 30 days before expiration, the API call is rejected with an HTTP 401 unauthorized status. Because this background script runs via server cron jobs, no one sees the error until the certificate expires and traffic halts.

Catching Certificate Failures Before Customers Do

Fixing an expired certificate while customer support emails pile up is painful. The only reliable way to avoid certificate downtime is proactive validation from outside your network stack. Relying on an email from your registrar that might land in your spam folder is not an operational strategy.

You need a system that inspects the live TLS handshake of every subdomain 14 to 30 days before the active certificate expires. This gives you ample time to fix a broken ACME token, correct a CAA record, or restart a cached edge proxy during regular working hours, rather than scrambling during peak traffic.

At Nightlamp, we believe non-technical founders shouldn't need to spend weekends parsing raw terminal commands or debugging reverse proxies. Nightlamp does not auto-remediate infrastructure on its own; a real engineer diagnoses each incident and tells you exactly what to fix. When your certificate is within two weeks of lapsing or your edge CDN serves a stale cryptographic chain, you receive plain-English diagnostics explaining the exact host, subdomain, and misconfiguration causing the issue.

Frequently Asked Questions

How long does an SSL certificate take to update after renewal?

Why does my site show secure for me but expired for my users?

This typically occurs when your application uses anycast DNS or multiple origin servers behind a load balancer, and only a portion of the infrastructure received the renewed certificate. Depending on geographic location or DNS routing, some visitors hit updated edge nodes while others connect to an un-reloaded server serving the expired file.

Can I just clear my browser cache to fix the expired certificate error?

Clearing your cache only works if the web server has already been updated with the valid certificate. If the server is still serving the old certificate file, no amount of browser cache clearing, device restarting, or incognito browsing will make the warning go away.

Why did my certificate auto-renew on my registrar but break my site?

Buying or auto-renewing an SSL certificate through a domain registrar (like GoDaddy or Namecheap) only issues the certificate on their platform. Unless you have their proprietary server hosting or an automated deployment agent configured, you must manually export that renewed certificate and upload it to your hosting platform or load balancer.

Does a renewed SSL certificate affect my SEO rankings?

A renewed certificate has no negative impact on SEO. However, if your renewed certificate is not properly served and visitors encounter security interstitial pages for several days, search engine crawlers will flag the site as inaccessible, which can cause organic rankings and search visibility to drop sharply.

Stop finding out about expired certificates and broken subdomain chains from angry users. Explore our managed App Care monitoring and start a trial to ensure your live web application stays fast, secure, and available around the clock.