Keys & Certificates

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

Credentials
Remember these credentials

Not saved: you will paste them again next time.

No credentials yet? Get a client ID and secret. They are sent only to this site, in an Authorization: Basic header.

POST /api/tls/check with a JSON body

Keyboard shortcuts

Esc
Close a menu or overlay, then leave full screen
↓ on a menu
Open it; ↑ ↓ move through its items
← → in the menu bar
Move between menus

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.

  1. 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).
  2. 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.
  3. 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 (depth 0 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. notes points out ordering gaps and expiry.
    • protocol, cipher, key_exchange_group: what the connection negotiated. X25519MLKEM768 means 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.

  1. 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.
  2. The checker resolves the host once and connects to that exact address, so it cannot be redirected by DNS changes mid-check (DNS rebinding).
  3. It runs openssl s_client -showcerts with SNI, the Mozilla CA bundle as the trust store, and -verify_hostname for RFC 6125 host-name verification.
  4. 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.