TLS Checker
Check the certificate a live server presents: trusted chain, host-name match, expiry, protocol and key exchange. Browsers cannot inspect another site's certificate, so this tool runs on the server and needs API credentials.
Try it
Where your data goes
| Using this page | Using the API, MCP or A2A | |
|---|---|---|
| Where it runs | This tool cannot run in a browser (web pages are not allowed to inspect another site's TLS certificate). The page sends your request to this site's API, with the credentials you enter. | In a Cloudflare Pages Function at the Cloudflare data centre nearest the caller. |
| What leaves your device | What you submit (and your credentials) goes to this site's API when
you press the button, and nowhere else: the page's Content-Security-Policy allows
connect-src 'self' only.
| The server receives the host name and port, and forwards them to the TLS checker operated by this service, which connects to that host. Nothing else is sent, and nothing is stored or logged apart from the per-call metadata row. The target host sees a TLS connection from the checker's network, not from you. |
| Stored | As for the API (right). | Your inputs and results: never. What is stored is your client record (client ID, a SHA-256 hash of your secret, expiry, and the profile you registered with) and one metadata row per call: operation, time, transport, status, error code, duration, request and response sizes, and country. |
| Logged | As for the API (right). | Only the per-call metadata above, attributed to your client ID. Never parameters, bodies, results, or credentials. Cloudflare, as the host, also processes request metadata (IP address, full URL including the query string, headers) under its own policies, so put inputs in POST bodies. |
| Access | Requires a client ID and secret. | Requires a client ID and secret (how to get one). HTTPS only; TLS terminates at Cloudflare. |
Details and how to verify this yourself: Security & privacy.
User guide
The tool sits in a window that works like a desktop app: menus on the top row and the full-screen icon at its right (Esc leaves full screen). Help → Keyboard shortcuts… lists the keys.
- Enter your client ID and secret (get them on the credentials page). Optionally choose to remember them: This tab or This device (until you click Forget).
- Enter the host (for example
example.com) and, if needed, a port. Leave servername empty unless you are connecting to an IP address and need a specific name checked. - Press Send request and read the result:
trusted: true: the chain leads to a root in the Mozilla trust store, and the certificate covers the host name.verification.errors: why it isn’t trusted, by chain position (depth0 is the server’s own certificate). Common codes:10: expired.18: self-signed.19: self-signed certificate in the chain, meaning an untrusted root.20: issuer not found, usually a missing intermediate.62: host name mismatch.
certificates: each certificate decoded, as in the Certificate Decoder.notespoints out ordering gaps and expiry.protocol,cipher,key_exchange_group: what the connection negotiated.X25519MLKEM768means a post-quantum hybrid key exchange.
From code: POST /api/tls/check with {"host": "example.com"}, the MCP tool tls_check, or the A2A skill tls_check. See the reference.
Specification
How the check runs.
- The API passes the host and port to a TLS checker operated by this service. The checker is a container running OpenSSL 3 on the operator’s own server, reached through an authenticated Cloudflare Tunnel.
- The checker resolves the host once and connects to that exact address, so it cannot be redirected by DNS changes mid-check (DNS rebinding).
- It runs
openssl s_client -showcertswith SNI, the Mozilla CA bundle as the trust store, and-verify_hostnamefor RFC 6125 host-name verification. - The handshake is allowed to complete, so OpenSSL reports its final verdict and every individual verify error.
What is refused.
- Non-public addresses: private, loopback, link-local, CGNAT (100.64/10), documentation, multicast and reserved ranges, for IPv4 and IPv6 (including IPv4-mapped and NAT64 forms). This applies to the address given and to the address the name resolves to.
- Ports other than 443, 8443, 465, 636, 853, 993, 995 and 5061. These speak TLS directly; STARTTLS ports such as 25 and 587 are not supported.
- Malformed host names. The connection target is never passed through a shell.
Limits.
- Timing: 10 seconds per connection, and at most 8 concurrent checks on the checker.
- Rate limits: the normal API limits apply.
Not checked. Revocation (OCSP, CRL), Certificate Transparency compliance, cipher-suite policy, and protocol downgrade behaviour.
What the target sees. A TLS connection from the checker’s network, not from you. The checker sends nothing except a standard TLS ClientHello and closes the connection after the handshake.
API & MCP
The same logic is available over HTTP and as MCP tools. Unlike this page, these run on the server: see where your data goes.