TLS certificate chain
Whether the server sends the intermediate certificate along with its own. Without it, clients that have not cached the intermediate refuse the connection.
Browsers trust a certificate because it is signed by an intermediate certificate, which is in turn signed by a root certificate the browser already holds. The server is expected to send its own certificate together with the intermediate; the root is never sent. When the intermediate is missing, the outcome depends on the client. Desktop browsers have usually met it before or fetch it on their own and show the site normally, while some Android devices, curl, payment gateways, webhooks and other server-to-server clients refuse the connection. That is the classic "works for me, fails for them" fault.
How SiteScan checks it
The scanner makes its own handshake and counts the certificates the server sends. A single certificate that is not self-issued means the intermediate was left out: the row turns amber with "Intermediate missing". Otherwise it reads "Complete".
How to fix
- Point the server at the full chain, not the bare certificate. With Certbot that is
fullchain.pem, notcert.pem; in nginx:ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; - On Apache 2.4.8 and later,
SSLCertificateFileshould contain your certificate followed by the intermediate. - With a purchased certificate, concatenate your certificate and the CA bundle in that order.
See also the certificate issuer.
See this check on your own site
Run a free scan: the report shows this row for your domain along with the other checks of the site audit.
More in “TLS certificate”
What SiteScan checks
TLS certificate
- TLS certificate expiry
- Outdated TLS versions (TLS 1.0/1.1)
- TLS certificate chain
- TLS certificate issuer
- Certificate signature algorithm
Domain registration
- Domain registration expiry
- Registered domain name
- Domain registrar
- Domain registration date
- Domain last updated date
- Domain status codes (EPP)
- Domain transfer lock
- Registrar abuse contact
- RDAP and WHOIS data source
Indexing
- robots.txt file
- CSS and JS blocked in robots.txt
- XML sitemap
- Sitemap index file
- Off-domain URLs in the sitemap
- Sitemap lastmod dates
- Broken URLs in the sitemap
- RSS and Atom feed
Addresses & redirects
Security headers
- HTTP security headers and grade
- Strict-Transport-Security (HSTS) header
- Content-Security-Policy (CSP) header
- X-Content-Type-Options: nosniff
- X-Frame-Options and clickjacking
- Referrer-Policy header
- Permissions-Policy header
- HSTS preload list
- CORS and cross-origin reads
- HTTP TRACE method
Delivery & reputation
- Cache-Control header for HTML
- ETag and Last-Modified revalidation
- HTTP/3 and QUIC support
- Server version disclosure in headers
- DNS blocklist (DNSBL) check
Internal links
Exposure
- Exposed sensitive files (.env, .git, backups)
- Directory listing enabled
- Public JavaScript source maps
- Exposed WordPress endpoints
Well-known files
- security.txt file
- llms.txt for AI assistants
- llms-full.txt file
- ads.txt authorized sellers file
- humans.txt file
- Well-known change-password URL
DNS & email
- MX records (mail servers)
- SPF record
- DMARC record and policy
- DNSSEC signing
- CAA record
- Nameserver redundancy
- IPv6 support (AAAA record)
- MTA-STS policy
- TLS-RPT reporting record
- BIMI record (brand logo in email)
- Wildcard DNS record
- Dangling CNAME and subdomain takeover
Privacy & consent
- Analytics and tracking scripts
- Cookie consent banner
- Privacy policy link
- Terms of service link
- Imprint (Impressum)
- Accessibility statement
Core Web Vitals
- Lighthouse performance score
- Largest Contentful Paint (LCP)
- Cumulative Layout Shift (CLS)
- Interaction to Next Paint (INP)
- CrUX field data vs lab data