Skip to content
LookupOwl

SSL certificate checker

Check that a site's certificate is valid, trusted by browsers and nowhere near its expiry date.

Just the host, like example.com. We use port 443 unless you change it.

More options

TCP port. Allowed: 443, 465, 587, 636, 853, 993, 995, 8443 (587 is SMTP with STARTTLS). A port written in the host overrides this.

Results for expired.badssl.com

Checked live lookup424 ms

JSONCheck again

Action needed

Expired 4234 days ago

This certificate ran out on 2015-04-12, so browsers are showing visitors a warning. If it’s your site, renewing it (or fixing auto-renew) clears this up.

ExpiredHost name matchesTLS 1.2
Expired

2015-04-12 · 4-day certificate

Chain of trust

3 certificates, from *.badssl.com up to COMODO RSA Certification Authority.

Protocol
TLS 1.2

ECDHE-RSA-AES128-GCM-SHA256

Issuer
COMODO CA Limited

COMODO RSA Domain Validation Secure Server CA

Names covered
2names

*.badssl.com, badssl.com

  • The certificate expired 4234 days ago (2015-04-12). Browsers block the site with NET::ERR_CERT_DATE_INVALID. Fix: Renew the certificate and install the new one, then reload the web server. With an ACME client such as certbot, check why automatic renewal did not run.
Certificate
Subject
*.badssl.com
Issuer
COMODO RSA Domain Validation Secure Server CA
Valid from
Valid until
(4,234 days ago)
Public key
RSA 2048
Signature
sha256WithRSAEncryption
Serial number
4AE79549FA9ABE3F100F17A478E16909
SHA-256 fingerprint
BA:10:5C:E0:2B:AC:76:88:8E:CE:E4:7C:D4:EB:79:41:65:3E:9A:C9:93:B6:1B:2E:B3:DC:C8:20:14:D2:1B:4F
Connection
Host
expired.badssl.com:443
Address
104.154.89.105
Protocol
TLS 1.2
Cipher
ECDHE-RSA-AES128-GCM-SHA256
ALPN
http/1.1
OCSP stapling
No
Verification message
CERT_HAS_EXPIRED
Names2

Names this certificate covers. A browser accepts it only for these.

  • *.badssl.com
  • badssl.com
Chain3
#RoleSubjectIssuerValid until
1Leaf*.badssl.comCOMODO RSA Domain Validation Secure Server CA
2IntermediateCOMODO RSA Domain Validation Secure Server CACOMODO RSA Certification Authority
3Last in chainCOMODO RSA Certification AuthorityAddTrust External CA Root
Structured result (JSON) · 3.4 KB
{
  "host": "expired.badssl.com",
  "port": 443,
  "ip": "104.154.89.105",
  "verdict": "expired",
  "valid": false,
  "authorized": false,
  "hostnameMatch": true,
  "chain": [
    {
      "subject": {
        "OU": "Domain Control Validated, PositiveSSL Wildcard",
        "CN": "*.badssl.com"
      },
      "issuer": {
        "C": "GB",
        "ST": "Greater Manchester",
        "L": "Salford",
        "O": "COMODO CA Limited",
        "CN": "COMODO RSA Domain Validation Secure Server CA"
      },
      "san": [
        "*.badssl.com",
        "badssl.com"
      ],
      "validFrom": "2015-04-09T00:00:00.000Z",
      "validTo": "2015-04-12T23:59:59.000Z",
      "serialNumber": "4AE79549FA9ABE3F100F17A478E16909",
      "fingerprint256": "BA:10:5C:E0:2B:AC:76:88:8E:CE:E4:7C:D4:EB:79:41:65:3E:9A:C9:93:B6:1B:2E:B3:DC:C8:20:14:D2:1B:4F",
      "keyType": "RSA",
      "keyBits": 2048,
      "signatureAlgorithm": "sha256WithRSAEncryption",
      "isCA": false,
      "selfSigned": false
    },
    {
      "subject": {
        "C": "GB",
        "ST": "Greater Manchester",
        "L": "Salford",
        "O": "COMODO CA Limited",
        "CN": "COMODO RSA Domain Validation Secure Server CA"
      },
      "issuer": {
        "C": "GB",
        "ST": "Greater Manchester",
        "L": "Salford",
        "O": "COMODO CA Limited",
        "CN": "COMODO RSA Certification Authority"
      },
      "san": [],
      "validFrom": "2014-02-12T00:00:00.000Z",
      "validTo": "2029-02-11T23:59:59.000Z",
      "serialNumber": "2B2E6EEAD975366C148A6EDBA37C8C07",
      "fingerprint256": "02:AB:57:E4:E6:7A:0C:B4:8D:D2:FF:34:83:0E:8A:C4:0F:44:76:FB:08:CA:6B:E3:F5:CD:84:6F:64:68:40:F0",
      "keyType": "RSA",
      "keyBits": 2048,
      "signatureAlgorithm": "sha384WithRSAEncryption",
      "isCA": true,
      "selfSigned": false
    },
    {
      "subject": {
        "C": "GB",
        "ST": "Greater Manchester",
        "L": "Salford",
        "O": "COMODO CA Limited",
        "CN": "COMODO RSA Certification Authority"
      },
      "issuer": {
        "C": "SE",
        "O": "AddTrust AB",
        "OU": "AddTrust External TTP Network",
        "CN": "AddTrust External CA Root"
      },
      "san": [],
      "validFrom": "2000-05-30T10:48:38.000Z",
      "validTo": "2020-05-30T10:48:38.000Z",
      "serialNumber": "2766EE56EB49F38EABD770A2FC84DE22",
      "fingerprint256": "4F:32:D5:DC:00:F7:15:25:0A:BC:C4:86:51:1E:37:F5:01:A8:99:DE:B3:BF:7E:A8:AD:BB:D3:AE:F1:C4:12:DA",
      "keyType": "RSA",
      "keyBits": 4096,
      "signatureAlgorithm": "sha384WithRSAEncryption",
      "isCA": true,
      "selfSigned": false
    }
  ],
  "issues": [
    {
      "severity": "error",
      "code": "EXPIRED",
      "message": "The certificate expired 4234 days ago (2015-04-12). Browsers block the site with NET::ERR_CERT_DATE_INVALID.",
      "fix": "Renew the certificate and install the new one, then reload the web server. With an ACME client such as certbot, check why automatic renewal did not run."
    }
  ],
  "checkedAt": "2026-11-14T17:44:20.500Z",
  "ms": 423,
  "expiresAt": "2015-04-12T23:59:59.000Z",
  "daysToExpiry": -4234,
  "issuedAt": "2015-04-09T00:00:00.000Z",
  "lifetimeDays": 4,
  "subject": "*.badssl.com",
  "issuer": "COMODO RSA Domain Validation Secure Server CA",
  "protocol": "TLSv1.2",
  "cipher": "ECDHE-RSA-AES128-GCM-SHA256",
  "alpn": "http/1.1",
  "authorizationError": "CERT_HAS_EXPIRED",
  "ocspStapled": false
}

What the SSL checker reports

When a browser opens an HTTPS site, the server presents a certificate to prove its identity. The checker connects to the server the same way and completes the TLS handshake, then reports what came back: who the certificate was issued to, which names it covers, who issued it, when it is valid, the chain up to the root, and the TLS version and cipher in use. It sends nothing after the handshake, so no page is requested.

FieldWhat it tells you
Subject and SANsThe subject alternative names: the names the certificate is valid for. The hostname you visit must be on the list (a wildcard such as *.example.com covers one level).
IssuerThe certificate authority (CA) that signed it.
Valid from / untilThe window in which it is valid, plus the days left.
ChainThe leaf certificate and the intermediates the server sends. Browsers need them to link the leaf to a trusted root.
Key and signatureThe key type and size (RSA 2048, ECDSA P-256) and the signing algorithm.
Protocol and cipherThe TLS version negotiated (TLS 1.2 or 1.3) and the cipher suite. A server stuck on TLS 1.0 or 1.1 is flagged as outdated.
ALPNThe application protocol the server picked, where h2 means HTTP/2. LookupOwl asks for it on ports 443, 8443 and 853.
OCSP staplingOCSP is how a CA reports whether a certificate has been revoked. Stapling means the server attaches a recent answer to the handshake.
Trust and name matchWhether the chain verifies against trusted roots, and whether the certificate covers the name you entered.

How to use it

  1. Enter the hostType example.com, paste a URL, or add a port, as in mail.example.com:993. The default is 443, and 8443 works for a web server on an alternate port. Public IP addresses work as well, and the last question below lists the mail, LDAP and DNS-over-TLS ports.
  2. Read the verdictThe headline reads Valid and trusted, Expires in N days (30 or fewer left), Expired N days ago, Not valid yet, Self-signed certificate, Browsers won't trust this, Certificate is for a different name, or Only supports outdated TLS. A list of problems follows, most with a suggested fix.
  3. Open the detailsIf something fails, the Chain tab lists each certificate with its issuer and expiry date, so you can see where a link is missing or has expired. The other tabs show the certificate itself, the connection and the names it covers.

Common certificate errors, decoded

ProblemWhat it meansFix
ExpiredThe valid-until date is in the past (Chrome shows NET::ERR_CERT_DATE_INVALID).Renew and install the new certificate, then check your automation. See the expiry checker.
Name mismatchThe hostname is not in the certificate's SAN list (Chrome shows ERR_CERT_COMMON_NAME_INVALID).Reissue with the right names, or point the name at the right server.
Incomplete chainThe server did not send an intermediate certificate that links yours to a trusted root.Install the full chain: your certificate plus the intermediates, usually the fullchain.pem file.
Untrusted or self-signedThe root is not in the client's trust store.Use a public CA for public sites, or install your private root on clients.
Wrong certificate on some IPsDifferent servers behind one name present different certificates.Make every server or load balancer use the same certificate.
Only outdated TLSThe server refuses TLS 1.2 and 1.3 and only speaks TLS 1.0 or 1.1. Every current browser needs TLS 1.2 or newer (RFC 8996).Enable TLS 1.2 and 1.3 on the server, load balancer or CDN and turn off the old versions. If the software is too old for TLS 1.2, update it or put a CDN or proxy in front.
Weak key or signatureAn RSA key under 2048 bits, or a SHA-1 signature.Reissue with an RSA 2048 or ECDSA P-256 key and a SHA-256 signature.
Lifetime above the limitThe certificate is trusted but valid for longer than the CA/Browser Forum allows: over 398 days, or over 200 days if issued since 15 March 2026.Unusual from a public CA, so check where it came from. The limit falls to 100 days on 15 March 2027 and 47 days on 15 March 2029, as the expiry checker page explains.
  • Works in my browser, fails in curl or an API client. Suspect an incomplete chain first, since browsers can fetch a missing intermediate and many libraries cannot.
  • SNI matters. Servers hosting many sites choose a certificate from the name the client sends (SNI). The checker sends the name you entered, as browsers do. For an IP address it sends no name, so the server shows its default certificate.
  • Old TLS versions. LookupOwl connects with TLS 1.2 or 1.3 first. If a server refuses both, it makes one more attempt that can only use TLS 1.0 or 1.1, just to learn which version the server speaks and read its certificate. You then see “Only supports outdated TLS”, with the dates and names from that certificate. The chain is not checked for trust over that connection, and the result is never a pass. Enable TLS 1.2 and 1.3 on the server, then check again. If even the older attempt fails, you get a short message saying the server refused every version we can speak, instead.
  • Revocation is not the same as expiry. A revoked certificate can still look valid by date. The checker reports whether the server stapled an OCSP response, but it does not ask the CA about revocation. Some CAs, such as Let's Encrypt, have stopped running OCSP, so “No” under OCSP stapling is normal for their certificates.
  • Trust follows one root list. The verdict uses the public root certificates bundled with LookupOwl's software (the Mozilla list). Chrome, Apple and Microsoft keep their own lists, so a rare certificate can be trusted by one and not another.

Installation problems to look for

  • The certificate is on the web server but not on the CDN or load balancer. The public name ends its TLS at whichever layer answers first.
  • Renewed but still serving the old certificate. The service needs a reload or restart, or there are several nodes and one was missed.
  • Only the bare domain is covered. A certificate for example.com does not automatically cover www.example.com. List both names in the SANs.
  • Wildcard expectations. *.example.com covers shop.example.com, but not example.com or a.b.example.com.
  • Forgotten services. Mail servers (SMTPS 465, IMAPS 993), LDAPS and DNS-over-TLS endpoints have certificates too, and they expire just as quietly.
  • Internal names. The checker only reaches public hosts. Private, loopback and internal names, and single-word names like intranet, are refused.

How the check works

LookupOwl looks up the host, checks that every address is public, connects to one of them on the port you chose and completes a TLS handshake. It sends the server the name you entered (SNI) and, on ports 443 and 8443, offers HTTP/2 and HTTP/1.1 (ALPN). On port 587 it first asks the mail server to switch to TLS with STARTTLS. It records the certificate chain, the protocol, the cipher and whether a stapled OCSP response arrived, then hangs up. If the server refuses TLS 1.2 and 1.3, one more attempt that can only use TLS 1.0 or 1.1 reads the certificate and the version, and that result is marked unverified. The trust and name checks are done by the TLS library itself, against its bundled roots. A handshake gets about nine seconds, fresh checks of any one host are limited to 20 a minute across all callers, and results are cached for up to ten minutes. Check again fetches a fresh one.

Shell
# The same thing with OpenSSL
openssl s_client -connect example.com:443 -servername example.com -showcerts </dev/null

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

Standards

  • RFC 5280: the X.509 certificate and path validation profile. RFC 9525: service identity checks (replaces RFC 6125).
  • RFC 8446 and RFC 5246: TLS 1.3 and 1.2. RFC 8996: deprecation of TLS 1.0 and 1.1.
  • RFC 6066: Server Name Indication, and the certificate status request behind OCSP stapling. RFC 7301: ALPN. RFC 3207: STARTTLS for SMTP.
  • RFC 6960: the Online Certificate Status Protocol (OCSP).
  • CA/Browser Forum Baseline Requirements: the rules public CAs follow, including certificate lifetimes.

Questions people ask

How do I check an SSL certificate?

Enter the hostname above. The checker connects the way a browser does, then shows the certificate, its dates, the chain and any problems found, with a suggested fix for most. Add a port, as in mail.example.com:993, to check a mail server or another TLS service.

What is an incomplete certificate chain?

It means the server sent its own certificate but not the intermediate certificates that connect it to a trusted root. Some browsers recover by fetching the missing link, but many apps, libraries and mail servers do not, so the site works for you and fails for others.

Why does it say the name does not match?

Because the hostname you entered is not in the certificate's subject alternative names. Either the certificate was issued for different names, or the DNS record points to the wrong server. Check the Names tab to see which names the certificate does cover.

Why does my browser show a warning when the checker says the certificate is valid?

The cause is probably on your side or on another server. Check your device's clock, security software that inspects HTTPS, and any cached warning in the browser. Large sites also use many servers, so yours may be answering with a different certificate than the one LookupOwl reached. The Connection tab shows which address was checked.

Is a certificate from Let's Encrypt as good as a paid one?

For encryption and browser trust, yes. A free Let's Encrypt certificate protects traffic as strongly as a paid one. Paid certificates differ in support, warranty and validation type, not in the strength of the encryption. Let's Encrypt certificates are short-lived, so automatic renewal matters more.

Does this check TLS versions and ciphers?

It reports the version and cipher negotiated in this one connection, and it tells you when a server refuses TLS 1.2 and 1.3 and only speaks TLS 1.0 or 1.1. That is not a full configuration audit, because it does not list every protocol and cipher suite the server supports. For that you need a dedicated TLS scanner, which tries each version and cipher in turn.

Can I check a non-HTTPS service?

Yes, on the supported ports. Services that use TLS from the first byte work on 465 (SMTPS), 993 (IMAPS), 995 (POP3S), 636 (LDAPS) and 853 (DNS-over-TLS). On 587 (SMTP submission) the checker asks for STARTTLS before the handshake. Other STARTTLS services, such as IMAP on 143, are not supported.

Is anything stored about the sites I check?

Not in our routine server logs, which do not record the names you look up. Results are held in memory for up to ten minutes so repeat checks are quick. On the website, Google Analytics does see what you look up. The privacy policy lists exactly what is collected.

Use it from AI, the API or the command line

Every LookupOwl tool is also a free API and an MCP tool, with no key and no account. This one is ssl_check. Please be kind to the rate limits.

curl
curl "https://lookupowl.com/api/v1/tools/ssl-checker?q=example.com"
MCP
claude mcp add --transport http lookupowl https://lookupowl.com/mcp