SSL Checker

Enter a host name to see the certificate its server actually presents: whether it chains to a trusted authority, whether it covers that name, and how many days are left before it expires. A certificate that looks fine in your browser can still fail for API clients and webhook senders, and the usual reason, a missing intermediate, is one of the things this check is built to catch.

Unlike the other tools on this site, this one cannot run in your browser: a web page cannot read another server's certificate. The host name you enter is sent to api-tester.com's server, which makes one TLS connection to it and reports what it was shown. We do not log or store the names you check. The examples use badssl.com, a public test site with deliberately broken certificates.

Nothing checked yet.
Enter a host name and press Check.

The three checks

“SSL certificate” is the everyday name; the protocol has been TLS for many years, and the two words are used interchangeably here. Whatever it is called, a client decides whether to trust a server by asking three questions, and this tool asks the same three.

CheckPasses whenTypical failure
Trusted chainThe certificate links, through any intermediates, to a root authority the client already trustsSelf-signed certificate, private CA, or a missing intermediate
Host nameThe name you connected to is listed in the certificate's subject alternative namesCertificate issued for www.example.com used on api.example.com
Validity datesToday falls between “not before” and “not after”Renewal did not happen, or a renewed certificate was never deployed

All three must pass. A failure in any one stops a well-behaved client before it sends a request, so there is no HTTP status code to read, only a connection error. The HTTP vs HTTPS guide explains what each check protects against.

The missing intermediate: works in a browser, fails in code

Certificate authorities do not sign your certificate with their root. They sign it with an intermediate certificate, which the root signed in turn. A client only holds the roots, so the server has to send the intermediate along with its own certificate; without it, the client has a certificate signed by something it has never seen.

Browsers hide the mistake. They cache intermediates from other sites and can download a missing one using a URL inside the certificate, so the padlock appears and everything looks healthy. Command-line tools, programming language runtimes and other servers do none of that. The result is the classic report: the site works for every person who opens it, and every API client, webhook sender and monitoring probe gets unable to verify the first certificate or unable to get local issuer certificate.

This checker connects the way code does, without a cache and without fetching anything extra. If the chain check fails with a note that the intermediate was not sent, the fix is on the server: install the full chain file your authority provided, which most name fullchain.pem, in place of the certificate on its own.

Reading the rest of the report

Names on the certificate

The list of subject alternative names is the complete set of host names the certificate is good for. A wildcard such as *.example.com covers exactly one level: api.example.com, but neither example.com itself nor v2.api.example.com. The older “common name” field is no longer consulted by modern clients, so a name must be in this list to count.

Expiry

Public certificates are short-lived by design and getting shorter, which makes automatic renewal the only workable arrangement. When a certificate is inside its last two weeks and has not been replaced, the automation has usually stopped: a cron job removed, a DNS record the challenge depends on changed, or a renewed certificate sitting on disk because the web server was never reloaded. This tool flags anything with 15 days or fewer remaining.

Protocol, cipher and ALPN

These describe the single connection that was made: the TLS version and cipher suite the server chose from what was offered, and the application protocol agreed through ALPN, where h2 means the server speaks HTTP/2. They show what the server prefers, not everything it supports. A server that negotiates TLS 1.3 here may still accept older versions from older clients, and this check does not probe for those.

The chain

Each certificate is listed with its subject, issuer, validity, key and SHA-256 fingerprint. The fingerprint identifies one exact certificate, which makes it the thing to compare when you need to know whether two servers, or a server before and after a deployment, are presenting the same one.

What this check does not cover

  • It is one vantage point. The connection is made from this site's server. A host behind a CDN or a geographic load balancer can present a different certificate elsewhere, and a server on a private network cannot be reached at all.
  • Trust is judged against one root list. The chain is verified against the certificate authorities bundled with the Node.js runtime on our server, which follows Mozilla's list. A very old device, or a corporate machine with extra roots installed, may decide differently.
  • Revocation is not checked. A certificate that has been revoked but is otherwise valid is reported as valid.
  • Only implicit TLS, on a fixed list of ports. Services that begin in plain text and upgrade with STARTTLS, such as SMTP on port 587, cannot be checked, and arbitrary ports are not accepted.
  • It is not a configuration audit. Weak cipher support, protocol downgrade and header policy are outside its scope.

To repeat the check from your own machine, curl -v https://example.com/ prints the handshake and certificate details; the curl verbose example explains the output, and the curl SSL example covers the certificate options.

Certificate errors and what they mean

Error a client reportsCauseFix
certificate has expiredPast its “not after” dateRenew, deploy, and reload the server
unable to verify the first certificateIntermediate not sentServe the full chain
self-signed certificateNo authority vouches for itUse a certificate from a public authority, or add your CA to the client's trust store
hostname mismatch, or no alternative certificate subject name matchesThe name is not on the certificateReissue with the name included, or call the name it was issued for
certificate is not yet validThe client's clock is wrong, or the certificate was installed earlyCorrect the clock

When the cause is on your side as the caller, resist the shortcut of switching verification off. It turns an error into silence and removes the protection along with it; the curl ignore-certificate page sets out the safer options. If the host name will not resolve in the first place, start with the DNS lookup.

Frequently asked questions

How do I check if an SSL certificate is valid?

Enter the host name above and press Check. The tool connects to the server and reports whether the certificate chain is trusted, whether the certificate covers that host name, and whether today is within its validity dates. All three must pass.

How do I check when an SSL certificate expires?

Run a check on the host. The result shows the expiry date and the number of days remaining, and flags any certificate with 15 days or fewer left.

Why does my site work in a browser but fail in curl or in code?

Most often because the server is not sending its intermediate certificate. Browsers can fill that gap from their cache or by downloading the intermediate, while command-line tools and programming languages cannot. Install the full chain on the server.

What is the difference between SSL and TLS?

TLS is the successor to SSL and is what every current server and client uses. SSL itself is obsolete and insecure. The word SSL survives as the common name for the certificates and for the padlock, so an SSL certificate today is a certificate used with TLS.

What is a certificate chain?

The sequence that links a server certificate to a trusted root: the server certificate is signed by an intermediate, and the intermediate by a root the client already holds. The server must send its own certificate and the intermediates for the chain to be verifiable.

Does a wildcard certificate cover the root domain?

No. A certificate for *.example.com covers one level of subdomain, such as api.example.com, but not example.com itself and not deeper names such as v2.api.example.com. The root must be listed separately.

Is the host name I check sent to your server?

Yes. A web page cannot inspect another server's certificate, so the name is sent to api-tester.com, which makes one TLS connection to that host and returns what it saw. The names you check are not logged or stored.

Related tools and reference