Skip to content
ssldays

Guide

SSL certificate not trusted: missing intermediate

Missing intermediates mimic distrust and often appear after sloppy renewals. Serve the full chain the CA issued, not just the leaf, and retest trust plus expiry together.

Updated Mar 19, 2026 839 words

Untrusted certificate warnings after renewal usually mean the server is not sending intermediates—even when the leaf expiry looks fine.

Users say SSL not trusted though you renewed yesterday—check chain files before reissuing again.

Some panels concatenate incorrectly; openssl -showcerts is the judge.

First response

Missing intermediates mimic distrust and often appear after sloppy renewals. Serve the full chain the CA issued, not just the leaf, and retest trust plus expiry together.

Search interest in ssl certificate not trusted missing intermediate rises when the leaf notAfter on the hostname customers type is already in the past. Clients cannot rewrite server certificate dates; they only accept chains that pass PKIX checks at handshake time.

For SSL certificate not trusted: missing intermediate, prove the failure from outside your office VPN before you change application code, purge caches, or ask end users to reboot. Capture the broken serial number and notAfter, renew on the listener that actually terminates that name, reload every node in the path, then re-run the same OpenSSL and browser checks that opened the incident.

Escalations for ssl-not-trusted-intermediate-missing should cite fresh openssl s_client -showcerts counting sent intermediate DNs output before anyone edits client code or blames Wi‑Fi. Missing intermediates mimic distrust and often appear after sloppy renewals. Serve the full chain the CA issued, not just the leaf, and retest trust plus expiry together. When untrusted root symptoms after sloppy renewal clusters around Browsers without cached issuer certificates, the expired material is usually bound to configs that stopped sending intermediate.pem instead of a mysterious platform bug. Executive summaries need the public hostname and current notAfter, not screenshots from a VPN-split test laptop.

See also Android SSL certificate expired errors and Certificate chain incomplete in the browser.

What this error means

Trust requires linking leaf to a root the client knows via sent intermediates.

Expired leaf plus missing chain produces stacked errors; fix both.

Point web server at fullchain.pem, reload, confirm path depth in browser.

In PKIX terms, Browsers without cached issuer certificates treat the TLS Certificate message as authoritative: signatures must verify, each link must be within notBefore/notAfter, and only then does name matching run against CN and SAN. When the leaf expired, untrusted root symptoms after sloppy renewal is expected even if the issuer is publicly trusted. Guides titled ssl not trusted intermediate missing still require reading dates on every certificate the server sends, including forgotten cross-sign intermediates.

Triage for ssl not trusted intermediate missing should reject quick myths: flushing DNS or rebooting laptops does not move server notAfter forward. It is not proof the whole internet is broken when other HTTPS sites load for Browsers without cached issuer certificates. It is not interchangeable with registrar billing lapses unless revalidation fails later. It is not fixed by turning off TLS at the load balancer while marketing keeps publishing https:// links. Validated externally, openssl s_client -showcerts counting sent intermediate DNs must show fresh dates on configs that stopped sending intermediate.pem before you close the incident.

Common causes

These patterns appear often during ssl certificate not trusted missing intermediate incidents. They are not exhaustive, but they explain why renewal looked finished internally while strangers still received expired material.

Runbooks for ssl not trusted intermediate missing most often break at handoff: certbot or a vendor portal issued new certs, but configs that stopped sending intermediate.pem never received a reload. Teams tracked PEM files in git while production continued serving the previous listener binding. OV renewals waited on legal approvers until untrusted root symptoms after sloppy renewal became customer-visible. Inventory spreadsheets omitted the hostname that Browsers without cached issuer certificates actually call during peak traffic.

Architecture amplifies ssl not trusted intermediate missing: multiple regions, canary pools, or blue/green deploys can leave one ASG member presenting yesterday's fullchain. Shared IP default certificates silently terminate vanity hostnames without dedicated SNI rules. Mounted TLS secrets updated on disk while Envoy or nginx workers kept the old chain until signaled. Missing intermediates mimic distrust and often appear after sloppy renewals becomes harder to debug when only a fraction of Browsers without cached issuer certificates hit the stale anycast node.

Measurement gaps complete the story for ssl not trusted intermediate missing. Synthetic monitors that disable certificate verification greenlit deploys that fail for real Browsers without cached issuer certificates. Redirect maps hid which hop expired until operators ran openssl s_client -showcerts counting sent intermediate DNs per hostname. Dashboards celebrated TCP uptime while notAfter crossed midnight UTC without a page. Post-mortems should ask whether CT logs or stapled OCSP would have warned days earlier.

Confirm from the outside

OpenSSL

echo | openssl s_client -connect HOST:443 -servername HOST 2>/dev/null | openssl x509 -noout -dates -subject -issuer

Count certs returned; compare to CA documentation.

How to read the output

Start with openssl s_client -showcerts counting sent intermediate DNs against the live customer hostname, capturing the leaf presented after SNI selection. Interpret notBefore= and notAfter= first: past notAfter guarantees failure for untrusted root symptoms after sloppy renewal regardless of pretty issuer branding. Next read subject= and any X509v3 Subject Alternative Name extension for alignment with the URL bar. Finally note issuer= so you know whether renewal changed intermediates; record serial numbers in the ticket for post-deploy diffing.

curl

curl -vI --connect-timeout 10 https://HOST/ 2>&1 | grep -Ei 'expire|SSL certificate|subject:|issuer:'

curl may report unable to get local issuer certificate.

Browser spot-check

Chain panel should show your CA intermediate under the leaf.

Fix checklist

Work this list in order for ssl certificate not trusted: missing intermediate. Each step should produce evidence (command output, timestamps, serial numbers) you can paste into the incident ticket.

  1. Download current CA bundle.
  2. Replace partial chain files on disk.
  3. Update automation templates.
  4. Reload all nodes.
  5. If leaf expired, reissue anyway.
  6. Test Android (strict) clients.
  7. Enable OCSP stapling after stable.
  8. Store working fullchain checksum in git.

Roll out and verify

Procurement for ssl not trusted intermediate missing begins with a reissue that lists every hostname Browsers without cached issuer certificates need, including forgotten admin and callback URLs. Validate CSR/key pairs, download CA bundles, and schedule work on configs that stopped sending intermediate.pem during a staffed change window. If automation handles ACME, prove challenges use the same DNS names customers resolve publicly, not internal-only labels.

Installation for ssl not trusted intermediate missing means concatenating leaf and required intermediates the way your stack documents, then touching every node that terminates the name. Reload web servers, recycle ingress pods, or update cloud listener objects so data planes read new bytes. For load balancers, sync default and per-host certificates so SNI cannot fall back to expired defaults. Repeat openssl s_client -showcerts counting sent intermediate DNs until fingerprints or serials change everywhere responders tested earlier.

Verification for ssl not trusted intermediate missing must mimic strangers: external synthetics, mobile carriers, and CI jobs without corporate trust roots. Confirm untrusted root symptoms after sloppy renewal disappeared for Browsers without cached issuer certificates on flows heavier than GET /. Restore any strict TLS, HSTS, or CDN SSL modes relaxed during firefighting. Feed the hostname into continuous notAfter monitoring with thresholds well before the next CA-enforced renewal cliff.

What to automate

Certificate files on disk lie. Automate live TLS checks on the exact hostname and port users hit, including redirects and the certificate presented after TLS terminates on a load balancer or CDN. Pair certificate notAfter with RDAP domain registration expiry so re-validation is not blocked by a lapsed registrar.

Fail deploys when served chain depth drops. Schedule alerts at 30, 14, 7, and 1 day before expiry so on-call has runway for ACME failures, manual OV revalidation, or change windows. Services such as ssldays can run external checks and renewal reminders without replacing your CA workflow.

Frequently asked questions

Apache SSLEngine?

Use SSLCertificateFile + SSLCertificateChainFile or combined fullchain per docs.

nginx ssl_certificate?

Single fullchain path is preferred.

Windows IIS?

Import intermediate store and bind complete chain.

CDN upload?

Some CDNs want concatenated PEM; verify format.

See what the server presents right now

Free live certificate check — no signup.