SSL Checker: Certificate Expiry, Chain & TLS Test

Enter any domain and this SSL certificate checker pulls the live certificate straight from the server — chain, expiry, TLS version, SANs, and everything in between. Takes about two seconds.

Full chain inspection TLS 1.2 & 1.3 detection Expiry countdown API & MCP access

What the checker actually looks at

Most SSL checkers just tell you "valid" or "invalid." That's not enough. A certificate can be technically valid and still cause browser errors, block mobile users, or expose a weak cipher. Whether you check SSL certificate of website root domains or a single API host, these are the fields that decide whether it works everywhere — and all of them are what we inspect.

Chain of trust

Full certificate chain

We walk the chain from your leaf certificate up through every intermediate CA to the root. Missing an intermediate is the most common cause of SSL errors that your own browser doesn't catch but mobile users and some APIs do.

Expiry

Expiry date and days remaining

Exact UTC timestamp plus a visual countdown. We flag anything under 30 days. If you're on Let's Encrypt and your auto-renewal has silently failed, this is where you find out.

Subject Alternative Names

Every hostname covered

The SANs list shows exactly which domains and subdomains your certificate covers. Critical to check after any renewal — some automated tools issue new certs that miss a subdomain from the old one.

Protocol

TLS version and cipher strength

We report the exact protocol version negotiated (TLS 1.2 or 1.3) and cipher suite. TLS 1.0 and 1.1 were deprecated in 2020. If your server still offers them, PCI DSS compliance will flag it.

Issuer

Certificate Authority and cert type

Who issued it and what kind: DV (domain validated), OV (organisation validated), or EV (extended validation). Matters if you're troubleshooting why certain enterprise proxies are blocking your connections.

Fingerprint

SHA-1 fingerprint and serial

Useful when you need to verify a specific certificate is installed — not just any valid cert. Common in zero-trust setups where you pin expected certificate fingerprints.


How to use this SSL checker

The tool is deliberately simple: no account, nothing to configure. If you're wondering how to check SSL certificate details for a domain you don't control, it's the same three steps — here's what happens when you submit one.

Enter the domain

Type any domain — example.com, api.example.com, mail.example.com. You can include or drop the https:// prefix, it doesn't matter. For non-standard ports, use example.com:8443.

We connect and retrieve the live certificate

nslookup.io connects to your domain on port 443 (or the port you specify), performs the TLS handshake, and pulls the actual certificate the server is currently serving. We check from multiple locations to avoid caching edge cases. No data is stored.

Read the results

Results show validity status, exact expiry timestamp, every certificate in the chain with issuer details, all SANs, cipher suite, and TLS version. Problems are flagged in red or amber so you don't have to hunt for them.

Check via API or MCP

If you're building tooling, running automated checks in CI/CD, or using an AI assistant that supports MCP, you can access the SSL checker programmatically.

REST API — simple GET request
GET https://api.nslookup.io/v1/ssl?domain=github.com
Authorization: Bearer YOUR_API_KEY

# Returns: issuer, expiry, daysUntilExpiry, chainValid,
#          sanDomains, cipher, protocolVersion, fingerprint
MCP (Model Context Protocol) — use directly in AI tools
# Add to your MCP config:
{
  "mcpServers": {
    "nslookup": {
      "url": "https://mcp.nslookup.io/mcp"
    }
  }
}

# Then in Claude, Cursor, or any MCP-compatible client:
# "Check the SSL certificate for api.example.com"
# → Returns live certificate data directly in your conversation

The MCP integration is particularly useful for teams running AI-assisted infrastructure reviews — you can check SSL status alongside DNS records, DMARC, and uptime from a single conversation without switching tools.


Reading the results

The certificate chain — why it's the part that matters most

When your server sends a certificate, it should send the entire chain: your domain's certificate, plus the intermediate CA certificate that issued it. Browsers already have the root CA in their built-in trust store. But they don't have the intermediate — they need your server to provide it.

If the intermediate is missing, most desktop browsers will try to fetch it automatically and usually succeed. But mobile browsers, IoT devices, and many API clients won't do this. They'll just show an error. That's why certificate chain errors are the most common bug that "works on my machine" — you tested it in Chrome on a Mac.

# Quick chain check from the command line:
openssl s_client -connect example.com:443 -showcerts </dev/null 2>/dev/null

# How many certificates do you see? You should see at least 2.
# If you only see 1, the intermediate is missing.

SSL vs TLS — what your server actually reports

Everyone says "SSL" but what's actually running is TLS. SSL 2.0 and 3.0 are both dead — they were deprecated years ago after critical vulnerabilities. TLS 1.0 and 1.1 were deprecated in March 2020 (RFC 8996). The current standard is TLS 1.3 (RFC 8446, 2018), with TLS 1.2 still acceptable.

Last verified: March 2026
ProtocolStatusShould you use it?
SSL 2.0 / 3.0Deprecated 2015No — disable immediately
TLS 1.0 / 1.1Deprecated 2020No — breaks PCI DSS compliance
TLS 1.2AcceptableYes, but upgrade to 1.3 where possible
TLS 1.3Current standardYes — faster handshake, stronger security

DV, OV and EV — certificate types explained

TypeWhat's verifiedIssuance timeBest for
DV (Domain Validated)You control the domainMinutesMost websites, APIs, Let's Encrypt
OV (Organisation Validated)Domain + legal organisation1–3 daysBusiness websites needing org name in cert
EV (Extended Validation)Domain + org + legal identity1–5 daysFinancial services, enterprise, high-trust

Common SSL errors and what causes them

Every error has a specific cause, and each browser has its own name for it. The same missing intermediate certificate is ERR_CERT_AUTHORITY_INVALID in Chrome, SEC_ERROR_UNKNOWN_ISSUER in Firefox and error 21 in OpenSSL — so find the row for what you're seeing, then read across.

Last verified: August 2026
What's actually wrongChrome & EdgeFirefoxSafari / command lineFix
Domain isn't listed in the certificateERR_CERT_COMMON_NAME_INVALIDSSL_ERROR_BAD_CERT_DOMAINNSURLErrorServerCertificateUntrusted (-1202)Reissue with every hostname in the SAN list — including the www variant
Certificate has expiredERR_CERT_DATE_INVALIDSEC_ERROR_EXPIRED_CERTIFICATENSURLErrorServerCertificateHasBadDate (-1201) · curl (60) certificate has expiredRenew it, then confirm the server is actually serving the new file
Not valid yet, or the clock is wrongERR_CERT_DATE_INVALIDSEC_ERROR_EXPIRED_ISSUER_CERTIFICATENSURLErrorServerCertificateNotYetValid (-1204)Check the server's NTP sync before touching the certificate
Intermediate certificate missing from the chainERR_CERT_AUTHORITY_INVALIDSEC_ERROR_UNKNOWN_ISSUERNSURLErrorServerCertificateHasUnknownRoot (-1203) · OpenSSL verify error 21Serve the full chain (leaf + intermediates). Browsers differ here, so it often "works" in one and not another
Self-signed certificateERR_CERT_AUTHORITY_INVALIDMOZILLA_PKIX_ERROR_SELF_SIGNED_CERTOpenSSL verify error 18 / 19Fine for internal tools; use a publicly trusted CA for anything users reach
Certificate was revokedERR_CERT_REVOKEDSEC_ERROR_REVOKED_CERTIFICATESafari: "This Connection Is Not Private"Reissue. If it was revoked for key compromise, generate a new key pair too
Plain HTTP being served on the HTTPS portERR_SSL_PROTOCOL_ERRORSSL_ERROR_RX_RECORD_TOO_LONGcurl (35) wrong version numberFix the vhost — something is listening on 443 without TLS
No TLS version or cipher in commonERR_SSL_VERSION_OR_CIPHER_MISMATCHSSL_ERROR_NO_CYPHER_OVERLAPcurl (35) handshake failureEnable TLS 1.2 and 1.3. Old clients hitting a modern-only config produce the same error
Deprecated TLS version still in useERR_SSL_OBSOLETE_VERSION (warning)SSL_ERROR_PROTOCOL_VERSION_ALERTOpenSSL: no protocols availableDisable TLS 1.0 and 1.1 — they fail PCI DSS and are rejected by modern clients
Weak signature algorithm (SHA-1)ERR_CERT_WEAK_SIGNATURE_ALGORITHMSEC_ERROR_CERT_SIGNATURE_ALGORITHM_DISABLEDSafari refuses the connection outrightReissue with SHA-256 or better
Traffic is being interceptedERR_CERT_AUTHORITY_INVALIDMOZILLA_PKIX_ERROR_MITM_DETECTEDIssuer shows as antivirus or a corporate proxyUsually local TLS-inspecting antivirus or a company proxy — not your server. Verify from outside the network
Certificate Transparency proof missingERR_CERTIFICATE_TRANSPARENCY_REQUIRED(not enforced)Safari enforces its own CT policyReissue through a CA that publishes to CT logs — any modern public CA does
Client certificate required or rejectedERR_BAD_SSL_CLIENT_AUTH_CERTSSL_ERROR_HANDSHAKE_FAILURE_ALERTcurl (58) unable to use client certificateCheck mutual-TLS config — the server is asking for a client certificate

Seeing an error in one browser but not another almost always means an incomplete chain: browsers that happen to have cached the intermediate succeed, and the rest fail. Test from a machine that has never visited the site.


Want expiry checked for you?

Manual checks catch problems after they happen. nslookup.io can watch your certificates and warn you before one expires.

Set up automated SSL monitoring →

SSL checks from the command line

For developers and sysadmins who prefer terminal access, here are the commands we use internally.

Check expiry date

echo | openssl s_client -servername example.com -connect example.com:443 2>/dev/null \
  | openssl x509 -noout -enddate

Show full certificate chain

openssl s_client -connect example.com:443 -showcerts </dev/null 2>/dev/null

Check TLS version support

# Test TLS 1.3 support:
openssl s_client -connect example.com:443 -tls1_3 </dev/null 2>/dev/null | head -3

# Test whether old TLS 1.0 is still enabled (it shouldn't be):
openssl s_client -connect example.com:443 -tls1 </dev/null 2>/dev/null | head -3

Decode an existing certificate file

openssl x509 -in cert.pem -noout -text -certopt no_header,no_version,no_pubkey

Quick expiry check in a script

#!/bin/bash
DOMAIN="example.com"
EXPIRY=$(echo | openssl s_client -servername $DOMAIN -connect $DOMAIN:443 2>/dev/null \
  | openssl x509 -noout -enddate | cut -d= -f2)
echo "$DOMAIN expires: $EXPIRY"

Questions we get a lot

How do I check if an SSL certificate is valid?

The fastest way is to use the checker above. Enter your domain and click Check. You'll see whether the certificate is currently valid, the exact expiry date, whether the chain is complete, and all the hostnames covered. If you want to do it from the command line, run: echo | openssl s_client -servername example.com -connect example.com:443 2>/dev/null | openssl x509 -noout -dates

Why does a valid certificate still cause browser SSL errors?

Nine times out of ten, it's a missing intermediate certificate. Your leaf cert is valid, but the server isn't sending the intermediate that connects it to the trusted root. Desktop Chrome usually handles this silently by fetching the intermediate from the URL in the AIA extension. But mobile Safari, older Android browsers, and most API clients don't do this — they just fail. Run our checker and look at the chain section. If you only see one certificate instead of two or three, that's your problem.

How often should I check my SSL certificate?

For Let's Encrypt certificates (90-day validity), the renewal should be automatic via certbot or your hosting provider. But automation fails silently, so check monthly. For commercial certificates that expire after 1–2 years, check quarterly. If you'd rather not remember, SSL monitoring checks daily for you.

What's the difference between SSL and TLS?

SSL (Secure Sockets Layer) is the predecessor protocol — SSL 2.0 and 3.0 are both long deprecated due to serious vulnerabilities. What you're actually running today is TLS (Transport Layer Security). When people say "SSL certificate" they mean a TLS certificate. The current standard is TLS 1.3 (2018), with TLS 1.2 still widely supported and acceptable. TLS 1.0 and 1.1 were deprecated in 2020 and should be disabled — especially if you're handling payment card data, where PCI DSS requires TLS 1.2 minimum.

Can I check SSL certificates via API?

Yes. The nslookup.io API lets you check any domain's SSL certificate and get back structured JSON with all fields — issuer, expiry, days remaining, chain validity, SANs, cipher, and TLS version. We also support MCP (Model Context Protocol), which means you can call the SSL checker directly from Claude, Cursor, or any MCP-compatible AI tool without writing API integration code yourself. See the API section above for examples.

Is this checker free?

Yes — the SSL checker is completely free. There's no account to create, no rate limits for typical usage, and nothing you check is stored. Run it as often as you like, on any domain.


SSL health doesn't exist in isolation. These tools help you check the full stack.